Два способа установления подключения к базе данных с использованием JDBC:
1. Используйте DriverManager в коде, чтобы получить подключение к базе данных. Этот метод неэффективен, а его производительность, надежность и стабильность постепенно уменьшаются по мере увеличения количества посещений пользователей.
2. Используйте метод настройки источников данных для подключения к базе данных. Суть этого метода состоит в том, чтобы добавить пул соединений базы данных на основе вышеуказанного метода, который очень эффективен.
Существует следующая разница между подключением к базе данных с использованием DriverManager в коде:
1) Пул подключения к источнику данных должен подключиться к базе данных в программе. Запротив сервера jndi (java именование и интерфейс каталогов), то есть вызов метода поиска () интерфейса контекста для получения объекта данных, а затем вызов метода getConnection () объекта DataSource для создания соединения.
2) Чтобы повторно использовать объекты подключения базы данных, улучшить время отклика на запросы и производительность сервера, используется технология объединения соединений. Технология объединения соединений устанавливает заранее несколько объектов подключения базы данных, а затем сохраняет объект соединения в пул соединений. Когда поступает запрос клиента, из бассейна вынимается объект подключения, чтобы обслуживать клиента. Когда запрос будет заполнен, клиентская программа вызывает метод Close () и помещает объект соединения обратно в пул.
3) По пути использования DriverManager для получения подключений к базе данных в коде объект подключения, полученный клиентской программой, является физическим соединением. Вызов метод Close () объекта соединения закроет соединение. Используя технологию объединения соединений, объект подключения, полученный клиентской программой, является направлением физического соединения в пуле соединений. Вызов метод Close () объекта соединения, физическое соединение не закрыто. Реализация источника данных только удаляет соединение между объектом подключения в клиентской программе и объектом соединения в пуле.
Для удобства тестирования вы можете создать пользовательскую таблицу в базе данных (см. MySQL 5 в качестве примера здесь):
Создать таблицу `user` (` yid` int (10) unsigned not null auto_increment, `username` varchar (50) по умолчанию Null,` password` varchar (50) null по умолчанию, `email` varchar (50) по умолчанию Null, первичный ключ (` id`),),);
Импортируйте пакет JAR водителя базы данных в каталог LIB Tomcat (здесь, взяв MySQL5 в качестве примера, используемый пакет JAR: MySQL-Connector-Java-5.0.8-bin.jar).
1. Используйте DriverManager в коде, чтобы получить подключение к базе данных. Этот метод неэффективен, а его производительность, надежность и стабильность постепенно уменьшаются по мере увеличения количества посещений пользователей.
Код Java для подключения к базе данных Oracle заключается в следующем:
Импорт java.sql.connection; Импорт java.sql.drivermanager; / ***Получить подключение к базе данных*/ public class dbconnection {/ ** oracle batabase connection url*/ private final Static String db_url = "jdbc: oracle: thin:@127.0.0.1: 1521: orcl"; / ** Драйвер соединения базы данных Oracle*/ private final Static String db_driver = "oracle.jdbc.driver.oracledriver"; / ** Имя пользователя базы данных*/ частная конечная статическая строка db_username = "root"; / ** Пароль базы данных*/ частная конечная статическая строка db_password = "admin"; / *** Получить подключение к базе данных* @return*/ public Connection getConnection () {/ ** Объявить объект соединения*/ connection conn = null; try { / ** Используйте метод class.forname () для автоматического создания экземпляра этого драйвера и автоматически вызовать DriverManager, чтобы зарегистрировать его* / class.forname (db_driver); / ** Получить подключение к базе данных через метод DriverManager getConnection ()*/ conn = drivermanager.getConnection (db_url, db_username, db_password); } catch (Exception ex) {ex.printstackTrace (); } return conn; } / *** Закройте подключение к базе данных** @param connect* / public void closeconnection (connection conn) {try {if (conn! = Null) { / ** Определите, что текущий объект соединения не закрыт, вызовите метод закрытия* / if (! Conn.isclosed ()) {conn.colose (); }}} catch (Exception ex) {ex.printStackTrace (); }}}Код JSP для подключения к базе данных MySQL выглядит следующим образом:
<%@page import = "java.sql.*, com.mysql.jdbc.driver"%> <%@page language = "java" contenttype = "text/html; charset = utf-8" pageencoding = "utf-8"%> <html> <body> <%/comp. Class.forname (Driver.class.getName ()). NewInstance (); String url = "jdbc: mysql: // localhost: 3306/demo? UseUnicode = true & haremencoding = utf8"; String user = "root"; String password = "123"; Connection conn = drivermanager.getConnection (URL, пользователь, пароль); Утверждение stmt = conn.createStatement (); String sql = "select * из пользователя"; ResultSet rs = stmt.executequery (sql); while (rs.next ()) {out.print ("<br />" + "====================" + "<br />"); out.print (rs.getlong ("id") + ""); out.print (rs.getString ("имя пользователя") + ""); out.print (rs.getstring ("пароль") + ""); out.print (rs.getstring ("email") + ""); } %> </body> </html>2. Используйте метод настройки источников данных для подключения к базе данных. Суть этого метода состоит в том, чтобы добавить пул соединений базы данных на основе вышеуказанного метода, который очень эффективен.
1) Код JSP в пуле подключений к данным базы данных MySQL выглядит следующим образом:
<%@page import = "java.sql.*, javax.naming.*, javax.sql.datasource"%> <%@page language = "java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <html> <body> <%intextct intextctx = newftextectextxtecteck = newf-8 "%> <html> <body> <%intextctx = newftexting = newf-8"%> <html> <body> <%. DataSource ds = (dataSource) initctx.lookup ("java: comp/env/jdbc/demodb"); Соединение conn = ds.getConnection (); Утверждение stmt = conn.createStatement (); String sql = "select * из пользователя"; ResultSet rs = stmt.executequery (sql); while (rs.next ()) {out.print ("<br />" + "====================" + "<br />"); out.print (rs.getlong ("id") + ""); out.print (rs.getString ("имя пользователя") + ""); out.print (rs.getstring ("пароль") + ""); out.print (rs.getstring ("email") + ""); } %> </body> </html>2) Добавьте следующий код в Server.xml в каталог конфликта Tomcat:
<Stext> <name name = "jdbc/demodb" auth = "container" type = "javax.sql.datasource" driverclassname = "com.mysql.jdbc.driver" url = "jdbc: mysql: // localhost: 3306/demo" username = root "root" = "123" Maxactive = "Maxactive =" Maxactive = "Maxactive =" Maxactive = "Maxactive =" MaxActive = "MaxActive =" MaxActive = "50". maxwait = "10000" /> < /context>
3) Настройте следующий контент под корневым узлом Web.xml в каталоге веб -проектов:
<sersource-ref> <socription> mysqldb connection </description> <res-ref-name> jdbc/demodb </res-ref-name> <res-type> javax.sql.datasource </res-type> <res-uthte> infater </res-wath> </resource-ref>
Конфигурация пула подключений источника данных была завершена, но для улучшения переносимости проекта лучше всего поместить содержание второго шага выше в контексте. XML каталога мета-инф (этот файл должен быть создан сам по себе):
<?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/demoDB" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/demo" username = "root" password = "123" maxactive = "50" maxidle = "30" maxwait = "10000" /> < /context>
3. Класс инструмента работы базы данных при настройке пула соединений базы данных источника данных
Код заключается в следующем:
пакет db.utils; Импорт java.sql.connection; Импорт java.sql.preparedStatement; импортировать java.sql.resultset; импортировать java.sql.resultsetmetdata; Импорт java.sql.sqlexception; Импорт java.sql.statement; импортировать java.text.dateformat; импортировать java.util.arraylist; импортировать java.util.date; импортировать java.util.hashmap; импортировать java.util.list; импортировать java.util.map; Импорт javax.naming.initialContext; импортировать javax.sql.datasource; // импорт org.apache.log4j.logger; /*** Операция базы данных Вспомогательный класс*/public class dbutils {// private static logger logger = logger.getlogger ("dbutils"); / ** * Это утверждение должно быть SQL INSERT, обновление или оператор DELETE * @param SQL * @param Paramlist: параметр, соответствующий заполнителю в операторе SQL * @return * @Throws Exception */ public int Execute (String SQL, List> Paramlist) exection {if (sql == null || //logger.info("Parameter действителен! »); } Соединение conn = null; Подготовленное Statatement pstmt = null; int result = 0; try {conn = getConnection (); pstmt = dbutils.getPreparedStatement (conn, SQL); setPreparedStatementParam (pstmt, paramlist); if (pstmt == null) {return -1; } result = pstmt.executeUpdate (); } catch (Exception e) {//logger.info (e.getMessage ()); бросить новое исключение (e); } наконец {близкое открытие (PSTMT); closeconn (conn); } return Result; } / *** Преобразовать набор результатов, полученный путем запроса базы данных в объект карты* @param sql: оператор запроса* @param paramlist: parameter* @return* / public <String <String, Object >> getQueryList (String SQL, список <object> paramlist) throws Exception {if (sql == null || //logger.info("Parameter действителен! »); вернуть ноль; } Соединение conn = null; Подготовленное Statatement pstmt = null; Результат RS = NULL; Список <map <string, object >> QueryList = null; try {conn = getConnection (); pstmt = dbutils.getPreparedStatement (conn, SQL); setPreparedStatementParam (pstmt, paramlist); if (pstmt == null) {return null; } rs = getResultset (pstmt); QueryList = getQueryList (RS); } catch (runtimeexception e) {//logger.info (e.getmessage ()); System.out.println («Параметр действителен!»); бросить новое исключение (e); } наконец {slowerSultset (rs); Близкое леса (PSTMT); closeconn (conn); } return QueryList; } private void setPreparedStatementParam (PreditStatement pstmt, list <object> paramlist) throws exception {if (pstmt == null || paramlist == null || paramlist.isempty ()) {return; } DateFormat df = dateFormat.getDateTimeInstance (); for (int i = 0; i <paramlist.size (); i ++) {if (paramlist.get (i) exanceof integer) {int paramvalue = ((integer) paramlist.get (i)). intvalue (); pstmt.setint (i+1, paramvalue); } else if (paramlist.get (i) exanceof float) {float paramvalue = ((float) paramlist.get (i)). floatvalue (); pstmt.setfloat (i+1, paramvalue); } else if (paramlist.get (i) exactionof double) {double paramvalue = ((double) paramlist.get (i)). DoubleValue (); pstmt.setDouble (i+1, paramvalue); } else if (paramlist.get (i) exactionof date) {pstmt.setString (i+1, df.format ((date) paramlist.get (i))); } else if (paramlist.get (i) exactionof long) {long paramvalue = ((long) paramlist.get (i)). longvalue (); pstmt.setlong (i+1, paramvalue); } else if (paramlist.get (i) exactionof long) {long paramvalue = ((long) paramlist.get (i)). longvalue (); pstmt.setlong (i+1, paramvalue); } else if (paramlist.get (i) exanceof string) {pstmt.setString (i+1, (string) paramlist.get (i)); } } возвращаться; } / ** * Получить подключение к базе данных * @return * @Throws Exception * / private Connection getConnection () Throws Exception {initialContext cxt = new initialContext (); DataSource ds = (dataSource) cxt.lookup (jndiname); if (ds == null) {бросить новое исключение («источник данных не найден!»); } return ds.getConnection (); } private static refectStatement getPreparEdStatement (соединение Conn, String SQL) Throws Exception {if (conn == null || sql == null || sql.trim (). equals ("")) {return null; } PrecateStatement PSTMT = conn.PrePareStatement (sql.trim ()); вернуть PSTMT; } / ** * Получить набор результатов запроса базы данных * @param pstmt * @return * @throhs excection * / private resultset getResultset (подготовка pstmt) Throws exection {if (pstmt == null) {return null; } ResultSet rs = pstmt.executequery (); вернуть Rs; } / ** * @param rs * @return * @Throws Exception * / Private List <Map <String, Object >> getQueryList (ResultSet RS) бросает исключение {if (rs == null) {return null; } ResultSetMetAdata rsmetadata = rs.getMetadata (); int columncount = rsmetadata.getColumnCount (); Список <map <string, object >> datalist = new ArrayList <map <string, object >> (); while (rs.next ()) {map <string, object> dataMap = new hashmap <string, object> (); for (int i = 0; i <columncount; i ++) {dataMap.put (rsmetadata.getColumnName (i+1), rs.getObject (i+1)); } datalist.add (dataMap); } вернуть Datalist; } / *** Закройте подключение к базе данных* @param conn* / private void closeconn (connection conn) {if (conn == null) {return; } try {conn.close (); } catch (sqlexception e) {//logger.info (e.getmessage ()); }} / *** Закрыть* @param stmt* / private void closeStatement (оператор STMT) {if (stmt == null) {return; } try {stmt.close (); } catch (sqlexception e) {//logger.info (e.getmessage ()); }} / *** Закрыть* @param rs* / private void scosteresultset (resultset rs) {if (rs == null) {return; } try {rs.close (); } catch (sqlexception e) {//logger.info (e.getmessage ()); }} частная строка jndiname = "java:/comp/env/jdbc/demodb"; public void setjndiname (string jndiname) {this.jndiname = jndiname; }}Сводка: Используйте метод настройки источников данных для подключения к базе данных. Этот метод эффективен и стабилен, поэтому рекомендуется его использовать.
Чтобы просмотреть больше синтаксиса Java, вы можете следовать: «Мысль в китайском руководстве Java», «JDK 1.7 Справочное руководство по английской версии», «Руководство по справочнику JDK 1.6 API Java», «Руководство JDK 1.5 API Java китайское справочное руководство». Я также надеюсь, что все будут поддерживать Wulin.com больше.