java_JDBC连接数据库代码大全
javaide、连接mysql数据库的代码
javaide、连接mysql数据库的代码在JavaIDE中连接MySQL数据库需要先下载MySQL的JDBC驱动程序,并将其添加到项目的构建路径中。
然后,在代码中使用以下步骤连接MySQL数据库:1. 导入必要的类。
import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;2. 声明数据库连接变量和数据库连接信息。
Connection conn = null;String url ='jdbc:mysql://localhost:3306/database_name';String user = 'username';String password = 'password';3. 注册驱动程序并创建连接。
try {Class.forName('com.mysql.jdbc.Driver');conn = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}4. 检查连接是否成功。
if (conn != null) {System.out.println('Database connected');} else {System.out.println('Database not connected');}注意:在连接数据库时,需要将 'database_name' 替换为实际数据库名称;'username' 和 'password' 替换为实际数据库用户和密码。
java-JDBC-ODBC连接数据库
那是连接数据库时,要获取一个可以执行sql语句的对象。
(偷懒,直接笔记了~)连接数据库步骤:a. 用java程序与db建立一个连接(通道)b。
根据连接获取一个执行sql语句的对象c。
执行sql语句d。
关闭连接public class Main {public static void main(String[] args) {try {//1加载驱动类//forName() 返回与带有给定字符串名的类或接口相关联的Class 对象Class.forName("org.gjt.mm.mysql.Driver");//a.建立连接通道//DriverManager管理一组JDBC 驱动程序的基本服务。
java.sql//getConnection() 返回:到URL 的连接String url="jdbc:mysql://127.0.0.1:3306/a11";String user="root";String password="root";Connection conn=DriverManager.getConnection(url, user,password);//相当于打开链接//b。
获取一个执行sql语句的对象//Statement 用于执行静态SQL 语句并返回它所生成结果的对象。
//createStatement()创建一个Statement 对象来将SQL 语句发送到数据库。
Statement st;st=conn.createStatement();//c.执行sql语句//执行给定SQL 语句,该语句可能为INSERT、UPDATE 或DELETE 语句,或不返回内容st.executeUpdate("insert intostudent(stuname,stuage,stusex,stubirth) values('张三',10,'m','1988-08-09')");//d.关闭连接//立即释放此Connection 对象的数据库和JDBC 资源,而不是等待它们被自动释放conn.close();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("加载驱动类失败!");} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//或者关闭写在finallyStatement stmt = Conn.createStatement(1004,1007);这里的1004,1007是什么意思呢?上网搜索了一下才发现意思如下:1.TYPE_FORWORD_ONLY,只可向前滚动;2.TYPE_SCROLL_INSENSITIVE,双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。
jdbc连接数据库
jdbc连接数据库import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;public class JDBConnection {public Connection conn = null; // 声明Connection对象的实例public Statement stmt = null; // 声明Statement对象的实例public ResultSet rs = null; // 声明ResultSet对象的实例private static String dbClassName = 'com.microsoft.jdbc.sqlserver.SQLServerDriver';//定义保存数据库驱动的变量private static String dbUrl ='jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=DB_A TM';private static String dbUser = 'sa';private static String dbPwd = 'sa';public JDBConnection(String propertyFileName) {// 带属性文件名的构造方法Properties prop = new Properties();// 属性集合对象InputStream is = null;try {is = JDBConnection.class.getClassLoader().getResourceAsStream(propertyFileName);// 属性文件输入流// is = new FileInputStream('src/' + propertyFileName);prop.load(is);// 将属性文件流装载到Properties对象中is.close();// 关闭流dbClassName = prop.getProperty('dbClassName');dbUrl = prop.getProperty('dbUrl');dbUser = prop.getProperty('dbUser');dbPwd = prop.getProperty('dbPwd');} catch (Exception e) {System.out.println('属性文件 ' + propertyFileName + ' 打开失败!');}try {Class.forName(dbClassName);// 1.注册驱动} catch (ClassNotFoundException e) {e.printStackTrace();}}public JDBConnection() {// 默认的不带参数的构造函数try {Class.forName(dbClassName);// 1.注册驱动} catch (ClassNotFoundException e) {e.printStackTrace();}}public static Connection getConnection() {Connection conn = null;try {// Class.forName(dbClassName);// 1.注册驱动conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd);//2.建立与数据库的链接} catch (Exception ee) {ee.printStackTrace();}if (conn == null) {System.err.println('警告: DbConnectionManager.getConnection() 获得数据库链接失败.\r\n\r\n链接类型:'+ dbClassName+ '\r\n链接位置:'+ dbUrl+ '\r\n用户/密码'+ dbUser + '/' + dbPwd);}return conn;}/** 功能:执行查询语句*/public ResultSet executeQuery(String sql) {try { // 捕捉异常conn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例connstmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,//3.创建语句ResultSet.CONCUR_READ_ONLY);rs = stmt.executeQuery(sql);//4.执行查询} catch (SQLException ex) {System.err.println(ex.getMessage()); // 输出异常信息}return rs; // 返回结果集对象 5.结果处理}/** 功能:执行更新操作*/public int executeUpdate(String sql) {int result = 0; // 定义保存返回值的变量try { // 捕捉异常conn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例connstmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);result = stmt.executeUpdate(sql); // 执行更新操作} catch (SQLException ex) {result = 0; // 将保存返回值的变量赋值为0}return result; // 返回保存返回值的变量}/** 功能:关闭数据库的连接*/public void close() {//6.释放资源try { // 捕捉异常try {if (rs != null) { // 当ResultSet对象的实例rs不为空时rs.close(); // 关闭ResultSet对象}} finally {try {if (stmt != null) { // 当Statement对象的实例stmt不为空时stmt.close(); // 关闭Statement对象}} finally {if (conn != null) { // 当Connection对象的实例conn不为空时conn.close(); // 关闭Connection对象}}}} catch (Exception e) {e.printStackTrace(System.err); // 输出异常信息}}}。
Java中的JDBC常用的连接字符串
Java中的JDBC常用的连接字符串1. Microsoft SQLServer()(SqlServer 2000)Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" );cn = DriverManager.getConnection( "jdbc:microsoft:sqlserver://localhost:1433;databaseName=pubs", sUs r, sPwd );(SqlServer 2005)Class.forName( "com.microsoft.sqlserver.jdbc.SQLServerDriver" );cn = DriverManager.getConnection( "jdbc:sqlserver://localhost:1433;databaseName=pubs", sUsr, sPwd );2. Oracle(/ip/deploy/database/oracle9i/)classes12.zipClass.forName( "oracle.jdbc.driver.OracleDriver" );cn = DriverManager.getConnection( "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );3. MySQL()mm.mysql-2.0.2-bin.jarClass.forName( "org.gjt.mm.mysql.Driver" );cn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", sUsr, sPwd );4. PostgreSQL()pgjdbc2.jarClass.forName( "org.postgresql.Driver" );cn = DriverManager.getConnection( "jdbc:postgresql://MyDbComputerNameOrIP/myDatabaseName", sUsr, sPwd );5. Sybase()jconn2.jarClass.forName( "com.sybase.jdbc2.jdbc.SybDriver" );cn = DriverManager.getConnection( "jdbc:sybase:Tds:MyDbComputerNameOrIP:2638", sUsr, sPwd );//(Default-Username/Password: "dba"/"sql")6. Microsoft SQLServer()Class.forName( "net.sourceforge.jtds.jdbc.Driver" );cn = DriverManager.getConnection( "jdbc:jtds:sqlserver://MyDbComputerNameOrIP:1433/master", sUsr, sPwd );7. ODBCClass.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection cn = DriverManager.getConnection( "jdbc:odbc:" + sDsn, sUsr, sPwd );8.DB2(新添加)Class.forName(".DB2Driver");String url="jdbc:db2://192.9.200.108:6789/SAMPLE"cn = DriverManager.getConnection( url, sUsr, sPwd );9.Microsoft SQL Server series (6.5, 7.x and 2000) and Sybase 10JDBC Name: jTDSURL: /Version: 0.5.1Download URL: /project/showfiles.php?group_id=33291语法:Class.forName("net.sourceforge.jtds.jdbc.Driver ");Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://host:port/database","user","password"); orConnection con = DriverManager.getConnection("jdbc:jtds:sybase://host:port/database","user","password"); 10.PostgresqlJDBC Name: PostgreSQL JDBCURL: /Version: 7.3.3 build 110Download URL: /download.html语法:Class.forName("org.postgresql.Driver");Connection con=DriverManager.getConnection("jdbc:postgresql://host:port/database","user","password");11.IBM AS400主机在用的JDBC语法有装V4R4以上版本的Client Access Express可以在C:\Program Files\IBM\Client Access\jt400\lib找到 driver 档案 jt400.zip,并更改扩展名成为 jt400.jar语法:java.sql.DriverManager.registerDriver (new com.ibm.as400.access.AS400JDBCDriver ());Class.forName("com.ibm.as400.access.AS400JDBCConnection");con = DriverManager.getConnection("jdbc:as400://IP","user","password");rmixClass.forName("rmix.jdbc.IfxDriver").newInstance();String url ="jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;user=testuser;password=testpassword";Lib:jdbcdrv.zip<br><br>Class.forName( "com.sybase.jdbc.SybDriver" )url="jdbc:sybase:Tds:127.0.0.1:2638/asademo";SybConnection connection= (SybConnection)DriverManager.getConnection(url,"dba","sql");13.SAP DBClass.forName ("com.sap.dbtech.jdbc.DriverSapDB");java.sql.Connection connection = java.sql.DriverManager.getConnection ( "jdbc:sapdb://" + host + "/" + database_name, user_name, password)14.InterBaseString url = "jdbc:interbase://localhost/e:/testbed/database/employee.gdb";Class.forName("interbase.interclient.Driver");//Driver d = new interbase.interclient.Driver (); /* this will also work if you do not want the line above */Connection conn = DriverManager.getConnection( url, "sysdba", "masterkey" );15.HSqlDBurl: /driver: org.hsqldb.jdbcDriver连接方式有4种,分别为:con-str(内存): jdbc:hsqldb.con-str(本地): jdbc:hsqldb:/path/to/the/db/dircon-str(http): jdbc:hsqldb:http://dbsrvcon-str(hsql): jdbc:hsqldb:hsql://dbsrv。
Java数据库连接(JDBC)实现与数据库的交互
Java数据库连接(JDBC)实现与数据库的交互Java数据库连接(JDBC)是Java语言用于与关系型数据库进行交互的标准API。
通过JDBC,我们可以实现与数据库的连接、查询、更新等操作,使得应用程序可以有效地与数据库进行数据交流和处理。
本文将介绍JDBC的基本概念、连接数据库的步骤、执行SQL语句的方法以及异常处理等相关内容。
一、JDBC的概念JDBC是Java语言中用于与数据库进行交互的API。
它提供了一组类和接口,用于连接数据库、执行SQL语句、访问数据库结果集等操作。
JDBC允许开发人员使用Java编写与数据库交互的代码,从而实现数据的存储、查询和更新。
二、连接数据库要使用JDBC与数据库进行交互,首先需要建立与数据库的连接。
连接数据库的步骤如下:1. 加载数据库驱动:根据不同的数据库,需要加载相应的驱动程序。
如MySQL数据库可以使用com.mysql.jdbc.Driver类作为驱动程序。
2. 指定数据库连接URL:URL是用于指定数据库连接位置和参数的字符串。
不同数据库的URL格式可能会有所不同。
3. 建立数据库连接:使用DriverManager类的getConnection()方法,传入数据库连接URL、用户名和密码等参数,建立与数据库的连接。
三、执行SQL语句连接数据库成功后,我们可以使用Statement或PreparedStatement接口的实例执行SQL语句。
其中,Statement接口适用于静态SQL语句,而PreparedStatement接口适用于动态SQL语句。
1. 执行查询:对于查询操作,可以使用Statement或PreparedStatement的executeQuery()方法执行SQL查询语句。
结果将以ResultSet对象的形式返回,我们可以通过ResultSet对象获取查询结果。
2. 执行更新:对于插入、更新和删除等操作,可以使用Statement或PreparedStatement的executeUpdate()方法执行SQL更新语句。
jdbc+代码oracle数据库连接,JDBC连接Oracle数据库代码
jdbc+代码oracle数据库连接,JDBC连接Oracle数据库代码import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class TestOracle {public static void main(String[] args) {Connection conn = null;Statement stmt = null;ResultSet rs = null;try {Class.forName("oracle.jdbc.driver.OracleDriver");//实例化oracle数据库驱动程序(建⽴中间件)String url = "jdbc:oracle:thin:@localhost:1521:oar92";//@localhost为服务器名,sjzwish为数据库实例名conn = DriverManager.getConnection(url, "guchao", "jimmy");//连接数据库,a代表帐户,a代表密码stmt = conn.createStatement();//提交sql语句,创建⼀个Statement对象来将SQL语句发送到数据库//查询数据⽤executeQueryrs = stmt.executeQuery("select * from ruby");//执⾏查询,(ruby)为表名while (rs.next()) {//使当前记录指针定位到记录集的第⼀条记录System.out.println(rs.getString("sid") +" "+ rs.getString("sname"));}//1代表当前记录的第⼀个字段的值,可以写成字段名。
Java_JDBC连接数据库_使用读取配置文件的方式
Java_JDBC连接数据库_使⽤读取配置⽂件的⽅式 1package com.homewoek3_4.dao;23import java.io.IOException;4import java.io.InputStream;5import java.sql.Connection;6import java.sql.DriverManager;7import java.sql.PreparedStatement;8import java.sql.ResultSet;9import java.sql.SQLException;10import java.util.Properties;1112/**13 * 数据库连接通⽤类14 * @author Administrator15*/16public abstract class BaseDao {17private static final String path = "database.properties";18private static String DB_DRIVER;19private static String DB_URL;20private static String DB_USER;21private static String DB_PWD;2223protected Connection conn = null;24protected PreparedStatement ps = null;25protected ResultSet rs = null;2627static {28 Properties pro = new Properties();29 InputStream io = BaseDao.class.getClassLoader().getResourceAsStream(path);30try {31//读取配置⽂件32 pro.load(io);33 } catch (IOException e) {34 e.printStackTrace();35 }36 DB_DRIVER = pro.getProperty("DB_DRIVER");37 DB_URL = pro.getProperty("DB_URL");38 DB_USER = pro.getProperty("DB_USER");39 DB_PWD = pro.getProperty("DB_PWD");40try {41//加载驱动类42 Class.forName(DB_DRIVER);43 } catch (ClassNotFoundException e) {44 e.printStackTrace();45 }46 }47/**48 * 打开数据库连接49*/50protected void openConn() {51try {52 conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PWD);53 } catch (SQLException e) {54 e.printStackTrace();55 }56 }57/**58 * 关闭数据库连接59*/60protected void closeConn() {61try {62if (rs != null) {63 rs.close();64 }65if (ps != null) {66 ps.close();67 }68if (conn != null) {69 conn.close();70 }71 } catch (SQLException e) {72 e.printStackTrace();73 }74 }75/**76 * 增删改77 * @param sql78 * @param obj79 * @return80*/81protected int executeUpdate(String sql, Object...obj) {82int result = -1;83this.openConn();84try {85 ps = conn.prepareStatement(sql);86if (obj != null) {87for (int i = 0; i < obj.length; i++) {88 ps.setObject(i+1, obj[i]);89 }90 }91 result = ps.executeUpdate();92 } catch (SQLException e) {93 e.printStackTrace();94 }95return result;96 }97/**98 * 查询99 * @param sql100 * @param obj101 * @return102*/103protected void executeQuery(String sql, Object...obj) {104this.openConn();105try {106 ps = conn.prepareStatement(sql);107if (obj != null) {108for (int i = 0; i < obj.length; i++) {109 ps.setObject(i+1, obj[i]);110 }111 }112 rs = ps.executeQuery();113 } catch (SQLException e) {114 e.printStackTrace();115 }116 }117 }创建database.properties⽂件,注意:后缀名⼀定是properties。
java连接Mysql方法和示例
非本人资料,资料来自:/cxwen78/article/details/6863696这网址很多好的资料。
JDBC是Sun公司制定的一个可以用Java语言连接数据库的技术。
一、JDBC基础知识JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
JDBC为数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯Java API 编写数据库应用程序,并且可跨平台运行,并且不受数据库供应商的限制。
1、跨平台运行:这是继承了Java语言的“一次编译,到处运行”的特点;2、不受数据库供应商的限制:巧妙在于JDBC设有两种接口,一个是面向应用程序层,其作用是使得开发人员通过SQL调用数据库和处理结果,而不需要考虑数据库的提供商;另一个是驱动程序层,处理与具体驱动程序的交互,JDBC驱动程序可以利用JDBC API创建Java程序和数据源之间的桥梁。
应用程序只需要编写一次,便可以移到各种驱动程序上运行。
Sun提供了一个驱动管理器,数据库供应商——如MySQL、Oracle,提供的驱动程序满足驱动管理器的要求就可以被识别,就可以正常工作。
所以JDBC不受数据库供应商的限制。
JDBC API可以作为连接Java应用程序与各种关系数据库的纽带,在带来方便的同时也有负面影响,以下是JDBC的优、缺点。
优点如下:∙操作便捷:JDBC使得开发人员不需要再使用复杂的驱动器调用命令和函数;∙可移植性强:JDBC支持不同的关系数据库,所以可以使同一个应用程序支持多个数据库的访问,只要加载相应的驱动程序即可;∙通用性好:JDBC-ODBC桥接驱动器将JDBC函数换成ODBC;∙面向对象:可以将常用的JDBC数据库连接封装成一个类,在使用的时候直接调用即可。
jdbc链接数据库url格式及正则表达式
jdbc链接数据库url格式及正则表达式JDBC链接数据库URL格式及正则表达式JDBC(Java Database Connectivity)是Java语言操作数据库的一种标准技术。
在使用JDBC连接数据库时,需要提供数据库的URL(Uniform Resource Locator),它是一个字符串,用于唯一标识数据库的位置。
本文将介绍JDBC连接数据库URL的格式以及相应的正则表达式。
JDBC连接数据库URL的格式通常由以下几部分组成:1. 协议:表示数据库的类型或驱动程序的名称。
常见的协议有MySQL、Oracle、SQL Server等。
2. 主机:表示数据库服务器的地址,可以是IP地址或主机名。
3. 端口:表示数据库服务器的端口号,用于与客户端建立连接。
如果没有指定端口,则使用默认端口。
4. 数据库名称:表示要连接的数据库的名称。
5. 其他参数:表示其他与连接相关的参数,如用户名、密码等。
根据不同的数据库类型,JDBC连接数据库URL的格式有所不同。
下面分别以MySQL、Oracle和SQL Server为例,介绍它们的URL格式及相应的正则表达式。
1. MySQLMySQL的JDBC连接URL的格式如下:jdbc:mysql://host:port/database其中,host表示数据库服务器的地址,port表示数据库服务器的端口号,database表示要连接的数据库的名称。
对应的正则表达式为:^jdbc:mysql://([a-zA-Z_0-9.-]+)(:\d+)?/([a-zA-Z_0-9.-]+)$2. OracleOracle的JDBC连接URL的格式如下:jdbc:oracle:thin:@host:port:database其中,host表示数据库服务器的地址,port表示数据库服务器的端口号,database表示要连接的数据库的名称。
对应的正则表达式为:^jdbc:oracle:thin:@([a-zA-Z_0-9.-]+)(:\d+)?(:[a-zA-Z_0-9.-]+)?$3. SQL ServerSQL Server的JDBC连接URL的格式如下:jdbc:sqlserver://host:port;databaseName=database其中,host表示数据库服务器的地址,port表示数据库服务器的端口号,database表示要连接的数据库的名称。
java连接数据库语句
java连接数据库语句在Java中,可以使用JDBC(Java Database Connectivity)来连接和操作数据库。
下面是连接数据库的常见语句示例:1. 加载数据库驱动:```javaClass.forName("com.mysql.jdbc.Driver");```2. 建立数据库连接:```javaString url = "jdbc:mysql://localhost:3306/mydatabase";String username = "root";String password = "password";Connection connection = DriverManager.getConnection(url, username, password);```其中,url是数据库的地址,username和password是登录数据库的用户名和密码。
3. 执行SQL查询或更新:```javaStatement statement = connection.createStatement();String sql = "SELECT * FROM mytable";ResultSet resultSet = statement.executeQuery(sql);``````javaString sql = "INSERT INTO mytable (column1, column2) VALUES ('value1', 'value2')";int rowsAffected = statement.executeUpdate(sql);```4. 处理结果集:```javawhile (resultSet.next()) {String column1 = resultSet.getString("column1");String column2 = resultSet.getString("column2");// 处理每一行数据}```5. 关闭数据库连接:```javaresultSet.close();statement.close();connection.close();```以上是连接和操作数据库的基本语句示例,具体的语句会根据使用的数据库类型、需要执行的SQL语句和具体业务需求进行调整。
JAVA使用JDBC连接数据库的几种方式
JAVA使用JDBC连接数据库的几种方式JDBC(Java Database Connectivity)是Java编程语言用于连接数据库的一种标准API。
它提供了一种访问和操作不同类型数据库的方法。
在JDBC中,有几种不同的方式可以连接数据库。
下面是常见的几种方式以及它们的详细介绍。
1.使用JDBC驱动程序连接数据库2. DriverManager类连接数据库DriverManager是一个Java类,用于管理JDBC驱动程序。
它提供了一种简单的方法来注册和获取特定驱动程序的连接。
使用DriverManager 连接数据库时,首先需要加载驱动程序,并使用驱动程序的URL、用户名和密码创建连接。
然后可以使用这个连接执行SQL查询和更新操作。
3. DataSource接口连接数据库DataSource是一个接口,用于从数据库连接池获取连接。
连接池是一组预先创建的数据库连接,可以重复使用,从而提高应用程序的性能。
通过使用DataSource接口,可以通过配置连接池的方式来连接和管理数据库连接。
这种方式通常适用于大型应用程序或需要高并发连接的场景。
4. 使用JNDI(Java Naming and Directory Interface)连接数据库JNDI是Java提供的一种用于在Java应用程序中查找和访问命名服务的API。
通过使用JNDI,可以在应用程序中配置数据库连接信息,并使用统一的方式访问数据库。
这种方式通常适用于企业级应用程序,其中数据库连接信息可以统一管理。
5.使用第三方库连接数据库除了使用JDBC标准API连接数据库,还可以使用一些第三方库来简化数据库访问。
例如,Hibernate是一个流行的Java持久化框架,它提供了一种简单的方式来与数据库进行交互。
使用Hibernate,可以通过简单的配置来连接和管理数据库。
总结:上述是几种使用JDBC连接数据库的方式。
每种方式都有自己的优势和适用场景。
JDBC连接数据库的原理和步骤
JDBC连接数据库的原理和步骤JDBC(Java Database Connectivity)是Java语言访问数据库的一种标准接口。
JDBC提供了一套统一的API,使得Java程序能够与各种不同的关系型数据库进行交互。
JDBC的原理和步骤如下。
1. 加载JDBC驱动程序:JDBC驱动程序是用于连接Java应用程序与数据库之间的桥梁。
在使用JDBC连接数据库之前,需要先加载相应的JDBC驱动程序。
加载JDBC驱动程序的方式有两种:直接使用`Class.forName(`方法加载驱动类,或者通过在`META-INF/services/java.sql.Driver`文件中配置驱动类的方式加载。
2. 建立数据库连接:使用`DriverManager`类的`getConnection(`方法建立与数据库的连接。
该方法返回一个`Connection`对象,表示与数据库之间的连接。
`getConnection(`方法需要传入数据库的URL、用户名和密码作为参数。
3. 创建Statement对象:`Statement`对象用于向数据库发送SQL语句,并接收执行结果。
通过`Connection`对象的`createStatement(`方法创建一个`Statement`对象。
4. 执行SQL语句:使用`Statement`对象的`executeUpdate(`方法执行SQL语句。
对于更新操作(如插入、更新、删除),使用`executeUpdate(`方法,并传入相应的SQL语句作为参数。
对于查询操作,使用`executeQuery(`方法执行查询,并返回一个`ResultSet`对象,用于遍历查询结果集。
5. 处理查询结果:对于查询操作,通过`ResultSet`对象可以获取查询结果集中的数据。
可以使用`next(`方法将光标移到结果集的下一行,并返回一个`boolean`值表示是否还有更多的行。
可以使用`getInt(`、`getString(`等方法获取特定字段的值。
java连接mysql数据库(JDBC驱动)
Java连接mysql数据库一.软件下载Mysql下载版本:4.1.11/downloads/mysql/4.1.htmlJDBC驱动下载版本:3.1.8/downloads/connector/j/3.1.htmlMysql界面插件:mysql-front下载版本镜像:HongKong(我下回来安装就是中文版了)http://www.mysqlfront.de/download.html二.软件安装打开下载的mysql安装文件mysql-5.0.27-win32.zip,双击解压缩,运行“setup.exe”,出现如下界面:mysql安装向导启动,按“Next”继续选择安装类型,有“Typical(默认)”、“Complete(完全)”、“Custom (用户自定义)”三个选项,我们选择“Custom”,有更多的选项,也方便熟悉安装过程在“Developer Components(开发者部分)”上左键单击,选择“This feature, and all subfeatures, will be installed on local hard drive.”,即“此部分,及下属子部分内容,全部安装在本地硬盘上”。
在上面的“MySQL Server (mysql服务器)”、“Client Programs(mysql客户端程序)”、“Documentation (文档)”也如此操作,以保证安装所有文件。
点选“Change...”,手动指定安装目录。
填上安装目录,我的是“F:\Server\MySQL\MySQL Server 5.0”,也建议不要放在与操作系统同一分区,这样可以防止系统备份还原的时候,数据被清空。
按“OK”继续。
返回刚才的界面,按“Next”继续。
确认一下先前的设置,如果有误,按“Back”返回重做。
按“Install”开始安装。
正在安装中,请稍候,直到出现下面的界面这里是询问你是否要注册一个的账号,或是使用已有的账号登陆,一般不需要了,点选“Skip Sign-Up”,按“Next”略过此步骤。
java连接各个数据库驱动名大全
------------
/**Sybase数据库连接*/
数据库驱动程序名:
base.jdbc.SybDriver
数据库连接地址:
jdbc:sybase:Tds:localhost:5007/erp
//erp为数据库名
Properties sysProps=System.getProperties();
数据库驱动程序名:org.postgresql.Driver
//连接数据库的方法
数据库连接地址:jdbc:postgresql://localhost/db_name
//db_name为数据可名
-----------------
DB2:
数据库驱动程序名:
com.ibm.db2.jdbc.app.DB2.Driver
------------
MySQL:
数据库驱动程序名:
com.mysql.jdbc.Driver
或
org.gjt.mm.mysql.Driver
数据库连接地址:
jdbc:mysql://localhost:3306/数据库名
<mysql有几种,建议不懂的自己查>
MySQL驱动程序下载地址:/mm.mysql-2.0.2-bin.jar
------------
Microsoft SQL Server 2005:
数据库驱动程序名:
com.microsoft.sqlserver.jdbc.SQLServerDriver
数据库连接地址:
jdbc:sqlserver://localhost:1433;DatabaseName=db_name //db_name为数据库名
jdbc参数
jdbc参数
JDBC(Java Database Connectivity)是Java语言中用于访问关系
型数据库的API。
在使用JDBC时,需要提供一些参数来连接数据库。
以
下是常见的JDBC参数:1. URL:数据库连接的URL,格式为jdbc:数据库
类型://主机名:端口号/数据库名。
例如,连接MySQL数据库的URL为jdbc:mysql://localhost:3306/test。
2. 用户名和密码:连接数据库需
要提供用户名和密码,用于验证身份。
3. 驱动程序:JDBC需要使用数据
库驱动程序来连接数据库。
驱动程序通常由数据库厂商提供,需要将其加
载到Java应用程序中。
4. 连接池参数:连接池是一种管理数据库连接的
技术,可以提高应用程序的性能和可伸缩性。
连接池参数包括最大连接数、最小连接数、连接超时时间等。
5. SQL语句参数:JDBC可以执行SQL语
句来操作数据库。
SQL语句参数包括查询条件、排序方式、分页等。
6.
事务参数:JDBC支持事务处理,可以保证数据库操作的原子性、一致性、隔离性和持久性。
事务参数包括事务隔离级别、提交方式等。
7. 数据库
配置参数:数据库有一些配置参数可以影响性能和安全性,例如缓存大小、日志级别、安全认证等。
总之,JDBC参数是连接数据库和操作数据库的
基础,需要根据具体的应用场景进行配置和调整。
Java连接Oracle数据库常用方法
Java连接Oracle数据库常用方法在Java中连接Oracle数据库有多种方法,下面是几种常用的方法。
1. 使用JDBC连接Oracle数据库```javaimport java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class OracleConnectionpublic static void main(String[] args)Connection connection = null;try//加载JDBC驱动程序Class.forName("oracle.jdbc.OracleDriver");//创建数据库连接String username = "username";String password = "password";connection = DriverManager.getConnection(url, username, password);//在此处执行SQL语句或其他操作} catch (ClassNotFoundException e) e.printStackTrace(;} catch (SQLException e)e.printStackTrace(;} finally//关闭数据库连接tryif (connection != null) connection.close(;}} catch (SQLException e)e.printStackTrace(;}}}``````javaimport java.sql.Connection;import java.sql.SQLException;import java.util.Properties;public class OracleConnectionPoolpublic static void main(String[] args)BasicDataSource dataSource = null;Connection connection = null;try//创建连接池Properties properties = new Properties(;properties.setProperty("driverClassName", "oracle.jdbc.OracleDriver");properties.setProperty("username", "username");properties.setProperty("password", "password");dataSource =BasicDataSourceFactory.createDataSource(properties);//从连接池中获取连接connection = dataSource.getConnection(;//在此处执行SQL语句或其他操作} catch (Exception e)e.printStackTrace(;} finally//关闭连接tryif (connection != null) connection.close(;}} catch (SQLException e) e.printStackTrace(;}//关闭连接池if (dataSource != null) trydataSource.close(;} catch (SQLException e) e.printStackTrace(;}}}}```3. 使用Spring的JdbcTemplateSpring的JdbcTemplate是一个简化数据库访问的工具类,可以更方便地执行SQL语句。
JAVA与SQLServer数据库连接共有两种方式
JAVA与SQLServer数据库连接的两种方式一.jdbc-odbc桥方式1.1 建立ODBC数据源:设置——〉控制面板——〉管理工具——〉数据源(ODBC)——〉系统DSN ——〉添加——〉选择SQLServer驱动——>填写数据源名字——〉选择服务器——〉选择登陆方式(默认使用windows NT验证)——〉更改默认数据库为所有数据库——〉完成测试成功则建立完毕。
1.2 导入包:import java.sql.*;1.3 装载驱动:DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());或者:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");第一种方式比较常用,也容易理解;1.4 建立连接:Connection con = DriverManager.getConnection("jdbc:odbc:xx");其中xx是1.1建立的数据源名字,如果建立的数据源选择的windowsNT验证方式,则上面语句即可;如果1.1所建立的数据源登陆方式选择的是SQL用户验证,则这里要写成:Connection con = DriverManager.getConnection("jdbc:odbc:xx","用户名","密码");其中的"用户名","密码"分别是SQLServer所建立的“登陆”用户,并具有对所用库的操作权限;1.5 建立载体:Statement st = con.createStatement();1.6 发出数据请求:查询数据操作:ResultSet rs = st.executeQuery("select * from titles");该语句将sql语句传递给数据库并返回一个结果集rs,即查询结果放在rs对象中;更新数据操作:int count=st.executeUpdate("update USERS set username='aaa' where id=3");所有对数据库进行的具有更新性质的操作(包含update,insert,delete等)都要调用这个方法,返回结果是一个整数,即该操作所影响的行数;1.7 处理结果集:rs.next()将结果集rs中的行指针向后移动一行,注意行指针最初在第一行之前,并没有指向第一行。
idea jdbc.properties mysql8.0的代码
idea jdbc.properties mysql8.0的代码这是一个示例的jdbc.properties文件,它适用于MySQL 8.0数据库:properties# MySQL JDBC connection properties# database URLjdbc.url=jdbc:mysql://localhost:3306/mydb# database usernameername=root# database passwordjdbc.password=password# JDBC driver class namejdbc.driverClassName=com.mysql.cj.jdbc.Driver在这个例子中,你需要将mydb替换为你的数据库名称,将root替换为你的数据库用户名,将password替换为你的数据库密码。
此外,你也需要确保你已经添加了正确的JDBC驱动到你的项目或类路径中。
如果你正在使用Maven,你可以在你的pom.xml文件中添加以下依赖来获取MySQL 的JDBC驱动:xml<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version></dependency>如果你正在使用Gradle,你可以在你的build.gradle文件中添加以下依赖:groovydependencies {implementation 'mysql:mysql-connector-java:8.0.23'}请记住,你需要将版本号替换为你正在使用的MySQL的版本。
使用JDBC连接数据库(一)
使⽤JDBC连接数据库(⼀)JDBC是由java编程语⾔编写的类及接⼝组成,同时它为程序开发⼈员提供了⼀组⽤于实现对数据库访问的JDBC API,并⽀持SQL语⾔。
利⽤JDBC可以将JAVA代码连接到oracle、DB2、SQLServer、MYSQL等数据库,从⽽实现对数据库中的数据操作的⽬的。
⼀、JDBC简介JDBC全称为:Java Data Base Connectivity (java数据库连接),可以为多种数据库提供填统⼀的访问。
JDBC是sun开发的⼀套数据库访问编程接⼝,是⼀种SQL级的API。
它是由java语⾔编写完成,所以具有很好的跨平台特性,使⽤JDBC编写的数据库应⽤程序可以在任何⽀持java的平台上运⾏,⽽不必在不同的平台上编写不同的应⽤程序。
JDBC的主要功能如下:(1)建⽴与数据库或者其他数据源的链接(2)向数据库发送SQL命令(3)处理数据库的返回结果⼆、JDBC中常⽤类和接⼝连接到数据库(Connection)、建⽴操作指令(Statement)、执⾏查询指令(executeQuery)、获得查询结果(ResultSet)等。
1、驱动程序管理类(DriverManager)DriverManager类是JDBC的管理类,作⽤于⽤户和驱动程序之间。
它跟踪在可⽤的驱动程序,并在数据库和相应驱动程序之间建⽴连接。
另外,DriverManager类也处理诸如驱动程序登陆时间限制及登录和跟踪消息的显⽰事务。
对于简单的应⽤程序,⼀般程序员需要在此类中直接使⽤唯⼀的⽅法时DriverManager.getConnection()。
该⽅法将建⽴与数据库的链接。
JDBC允许⽤户调⽤DriverManager的⽅法getDriver()、getDrivers()和registerDriver()及Driver的⽅法connect().2、声明类(Statement)Statement对象⽤于将SQL语句发送到数据库中。
java连接各个数据库驱动名大全
java连接各个数据库驱动名大全/**Oracle数据库连接*/Class.forName("oracle.jdbc.dirver.OracleDriver").n ewInstance();String url="jdbc:oracle:thin:@localhost:1521:orcl";//这里的orcl为数据库(SID实例名)String user="system";//用户名String pwd="manager123456";//密码java.sql.Connection conn=DriverManager.getConnection(url,user,pwd);Microsoft SQL Server:String Driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"; //连接SQL数据库的方法String URL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_name"; //db_name为数据库名String Username="username"; //用户名String Password="password"; //密码Class.forName(Driver).new Instance(); //加载数据可驱动Connection con=DriverManager.getConnection(URL,UserName,Passw ord); //MySQL: String Driver="com.mysql.jdbc.Driver"; //驱动程序String URL="jdbc:mysql://localhost:3306/db_name"; //连接的URL,db_name为数据库名String Username="username"; //用户名String Password="password"; //密码Class.forName(Driver).new Instance();Connection con=DriverManager.getConnection(URL,Username,Passw ord);/**Sybase数据库连接*/Class.forName("com.sybase.jdbc.SybDriver").newInst ance();String url="jdbc:sybase:Tds:localhost:5007/erp";//erp为数据库名Properties sysProps=System.getProperties();sysProps.put("user","sa");//用户名sysProps.put("password","");//密码java.sql.Connection conn=DriverManager.getConnection(url,SysProps);/**DB2数据库连接*/Class.forName("com.ibm.db2.jdbc.app.DB2Driver").ne wInstance();String url="jdbc:db2://localhost:5000/sample";//sample为DB2数据库名String user="admin";String pwd="";//密码java.sql.Connetion conn=DriverManager.getConnection(url,user,pwd);/**Imformix数据库连接*/Class.forName("rmix.jdbc.IfxDriver").newIn stance();String url="jdbc:informix-sqli://localhost:1533/test:INFO RMIXSERVER=infserver"; user="sa";//用户名password="pwd";//密码//test为数据库名//java.sql.Connection conn=DriverManager.getConnection(url,user,password );/**Sql Server数据库连接*/Class.forName("com.microsoft.jdbc.sqlserver.SQLSer verDriver").newInstance(); String url="jdbc:microsoft:sqlserver://localhost:1433;Dat abaseName=pubs";//pubs数据库名String user="sa";String pwd="";java.sql.Connection conn=DriverManager.getConnection(url,user,pwd);/**PostgreSQL数据库连接*/Class.forName("org.postgresql.Driver").newInstance ();String url="jdbc:postgresql://localhost/netshop";//newshop数据库名String user="root";String pwd="123456";java.sql.Connection conn=DriverManager.getConnection(url,user,pwd);Sysbase:String Driver="com.sybase.jdbc.SybDriver"; //驱动程序String URL="jdbc:Sysbase://localhost:5007/db_name"; //db_name为数据可名String Username="username"; //用户名String Password="password"; //密码Class.forName(Driver).newInstance();Connection con=DriverManager.getConnection(URL,Username,Passw ord);Oracle(用thin模式):String Driver="oracle.jdbc.driver.OracleDriver"; //连接数据库的方法String URL="jdbc:oracle:this:@loaclhost:1521:orcl"; //orcl为数据库的SIDString Username="username"; //用户名String Password="password"; //密码Class.forName(Driver).newInstance(); //加载数据库驱动Connection con=DriverManager.getConnection(URL,Username,Passw ord);PostgreSQL:String Driver="org.postgresql.Driver"; //连接数据库的方法String URL="jdbc:postgresql://localhost/db_name"; //db_name为数据可名String Username="username"; //用户名String Password="password"; //密码Class.forName(Driver).newInstance();Connection con=DriverManager.getConnection(URL,Username,Passw ord);DB2: String Driver="com.ibm.db2.jdbc.app.DB2.Driver"; //连接具有DB2客户端的Provider实例//String Driver=".DB2.Driver"; //连接不具有DB2客户端的Provider实例String URL="jdbc:db2://localhost:5000/db_name"; //db_name为数据可名String Username="username"; //用户名String Password="password"; //密码Class.forName(Driver).newInstance();Connection con=DriverManager.getConnection(URL,Username,Passw ord);Informix:String Driver="rmix.jdbc.IfxDriver";String URL="jdbc:Informix-sqli://localhost:1533/db_name:I NFORMIXSER=myserver"; //db_name为数据可名String Username="username"; //用户名String Password="password"; //密码Class.forName(Driver).newInstance();Connection con=DriverManager.getConnection(URL,Username,Passw ord);JDBC-ODBC:String Driver="sun.jdbc.odbc.JdbcOdbcDriver";String URL="jdbc:odbc:dbsource"; //dbsource为数据源名String Username="username"; //用户名String Password="password"; //密码Class.forName(Driver).newInstance();Connection con=DriverManager.getConnection(URL,Username,Passw ord);。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#使用JDBC操作数据库#1、JDBC基础#JDBC简介:JDBC(Java Database Connectivity)是一种可以执行SQL的Java API,通过它可以用一种API操作不同的数据库.#JDBC驱动:不同数据库间,标准的SQL语句可以移植,而数据库实际通信协议及某些数据库特征不可移植,因此,JDBC和数据库之间须还有一层,用于将JDBC调用映射成特定的数据库调用,此特殊层就是JDBC驱动程序.常见的JDBC驱动有四种:》JDBC-ODBC桥,是最早实现的JDBC驱动程序,目的为了快速推广JDBC,非多线程,能力有限,此驱动程序将JDBC API映射成ODBC API》直接将JDBC API映射成数据库特定的客户端API,这种驱动程序包含特定数据库的本地代码,可用于特定数据库的客户端》支持三层结构的JDBC访问方式,主要用于Applet阶段,通过Applet访问数据库》纯java的,直接与数据库实例交互,智能型的,知道数据库使用的底层协议,是目前最流行的JDBC驱动#JDBC常用接口和类简介DriverManager:用于管理JDBC驱动的服务类,主要方法是获得Connection对象public static synchronized Connection getConnection(String url,String user,String pass) throws SQLExceptionConnection:代表一个数据库连接物理会话,若放我数据库,须先获得数据库连接.常用方法》Statement createStatement() throws SQLException 返回Statement对象》PreparedStatement prepareStatement(Strin sql) throws SQLException 返回编译的Statement 对象》CallableStatement preparedCall(Strin sql) throws SQLException 返回的CallableStatement 对象用于存储过程调度Statement:执行DML SQL的工具接口,常用方法:》ResultSet executeQuery(String sql) throws SQLException 执行查询,返回结果集对应的ResultSet 对象》int executeUpdate(String sql) throws SQLException 执行DML并返回受影响的行数》boolean execute(String sql) throws SQLException 返回boolean表式执行成功与否PreparedStatement :是Statement的子接口,允许数据库预编译SQL,避免数据库每次重新编译,以后每次只改变SQL的参数,性能较好,常用方法》ResultSet executeQuery() throws SQLException 执行查询,返回结果集对应的ResultSet对象》int executeUpdate() throws SQLException 执行DML并返回受影响的行数》boolean execute() throws SQLException 返回boolean表式执行成功与否注:上述方法因SQL预编译,无须接手SQL字符串,只是需要接收参数,故有如下方法 void setXxx(int paramIndex,Xxx value)ResultSet:包含访问结果集的方法,可通过列索引或列名获得列数据,常用方法》boolean next() throws SQLException,将ResultSet定位到下一行,结果集的起始位在第一行之前》void close()throws SQLException 释放ResultSet对象》boolean absolute(int row)throws SQLException 将结果集移到指定行,若row是负值,则倒数移动注:默认方法创建的ResultSet不支持absolute方法因为结果集不支持后移,若想支持,需要如此创建:Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);:ResultSet rs=stmt.executeQuery(sql);#传统JDBC访问数据库步骤》通过Class.forName(String driverClass)注册数据库驱动》通过DriverManager.getConnection(String url,String user,String password)获得数据库连接对象》通过Connnection.createStatement()或者Connection.createPreparedStatement(String sql)创建相应的Statement对象》通过Statement.execute(String sql)或者PreparedStatement.execute()执行相应的SQL,并返回ResultSet对象》操作ResultSet#2、数据库连接池》数据库连接的建立及关闭极其耗资源,对系统性能影响尤为明显.》传统数据库连接方式:一个数据库连接均对应一个物理连接,每次操作都要打开、关闭该物理操作,这种频繁性,会造成系统性能下降,此时,考虑数据库连接池.》数据库连接池解决方案:当应用程序启动时,系统主动建立足够的连接(按指定的初始化数据),并将这些连接组成一个池.每次应用程序请求数据库连接时,无需重新打开连接,而是从池中取出已有的连接,使用完后,不再关闭,而是直接将该连接归还池,使用连接池,可大大提高系统运行效率.》数据库连接池介绍》对于共享资源的情况,有一个通用的设计模式--资源池(Resource Pool),用于解决资源的频繁请求、释放所造成的性能下降.为解决数据库连接的这种频繁性,JDBC2.0规范引入了数据库连接池技术,实际上,数据库连接池是Connection对象的工厂,常用参数有:@数据库的初始连接数 @连接池的最大连接数 @连接池每次增加的连接数》连接池的工作示意图 {JDBC标准的API并没有提供连接池的实现,仅仅提供了DataSource接口具体的实现有一些厂商提供}》连接池的分配与释放@程序启动,分配初始化数目的连接,按需分配,用过归还、超时归还,当申请时无或者达到指定的最小值,按增量参数值分配新的连接@为确保连接池中最小的连接数,通常有如下策略::动态--定时检查连接池,一旦发现数量小于最小连接数,则补充相应的新连接,保证连接池正常运转:静态--空闲连接不足时,系统才检测是否达到最小连接》连接池的实现连接池通常包括连接池类(DBConnectionPool)和连接池管理类(DBConnectionPoolManager):》连接池类是某一数据库所有连接的缓冲池,主要实现功能:@从连接池获取或者创建可用连接,@使用完毕,归还给池连接,@系统关闭前,断开所有连接并释放连接占用的资源,@处理无效连接,@限制池中连接的数节目,介于最小值和最大值之间》连接池管理类是连接池类的包装类,该类采用单态模式设计,保证系统中只有一个实例,主要用于管理多个连接池对象,主要实现以下功能:@注册数据库驱动程序,@根据配置文件,创建连接池对象,@命名、管理连接池,@跟踪连接池的使用,需要时关闭并释放资源:数据库连接池的管理是个难点,管理不当,造成系统开销过大,将成为性能瓶颈.对于高并发的WEB应用,采用连接池技术效率和稳定性比传统的连接方式要好的多:并发问题--数据库必须考虑此问题,对于并发,Java语言提供管理并发的支持,使用synchronized关键字可确保方法线程的安全.故,DataSource的getConnection方法必须以该该关键字修饰public synchronized Connection getConnection(); //保证线程安全:事务处理--JDBC的Connection本身通过设置Connection的AutoCommit属性为false,提供对事务的支持,然后,显式地调用commit或rollback方法提交或回滚事务.连接池需要复用connection,因此,必须提供相应的事务支持机制.考虑采用每个事务独占一个连接,此法可降低事务管理复杂性.:多数据库服务器和多用户--JDBC规范中,DataSource具备同时连接不同数据库的能力,如同时连oracle和sql server.此时,考虑使用xml配置文件来配置连接所需的相关信息.然后,提供一个Singleton 模式的连接池管理类,该管理类每次启动时读取配置文件信息,创建多个连接池类的实例,每个实例对应一个数据库连接池.连接池管理类实例命名每个连接池实例,通过不同的名称管理不同的连接池.对于多个用户访问同一个数据库的情况,也可考虑使用xml配置文件.》常见的数据库连接池通常,没有必要自己实现连接池.商用应用服务器都有自己的连接池实现,如WebLogic和WebSphere,其性能和稳定性绝佳,即使没有商用应用服务器,也可使用开源的连接池.目前流行的有2个:@DBCP连接池 @C3P0连接池》DBCP连接池Appache提供的开源实现,依赖于两个jar文件@commons-dbcp-1.2.1.jar:连接池的实现@commons-pool.jar:连接池实现的依赖库Tomcat的连接池正是采用该连接池实现的.连接该连接池,既允许与应用服务器整合使用,又可由应用程序独立使用.下面的代码DBConn类通过DBCP获得数据库连接:public class DBConn{private static DBConn dc;private Connection conn = null;private Statement stmt = null;private DBConn(){}public static DBConn instance(){if (dc == null){dc = new DBConn();}return dc;}public Statement openStmt(){if (stmt == null){conn = getConn();try{stmt = conn.createStatement();}catch (Exception e){System.err.println("创建Statement异常: " + e.getMessage());}return stmt;}public void closeStmt(){if (stmt != null){try{stmt.close();}catch (Exception e){System.err.println("Statement关闭异常"); }}if (conn != null){try{conn.close();}catch (Exception e)System.err.println("数据库关闭异常");}}}private Connection getConn(){if (conn == null){try{BasicDataSource ds = new BasicDataSource();ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/j2ee"); ds.setUsername("root");ds.setPassword("123456");conn = ds.getConnection();}catch (Exception e){e.printStackTrace();}}return conn;}》C3P0连接池Hibernate推荐使用该优秀的连接池,它实现了JDBC3.0规范的部分功能,故其性能更加突出,该池不仅可自动清理不再使用的Connection,还可以自动清理Statement和ResultSet.C3P0连接池需要jre1.3以上,推荐jre1.4若需使用C3P0连接池,应将包c3p0-0.8.5.jar文件复制进系统.下面代码是通过C3P0连接池获得数据库连接:public class DBConn{private static DBConn dc;private Connection conn = null;private Statement stmt = null;private DBConn(){}public static DBConn instance(){if (dc == null){dc = new DBConn();}return dc;}public Statement openStmt()if (stmt == null){conn = getConn();try{stmt = conn.createStatement();}catch (Exception e){System.err.println("创建Statement异常: " + e.getMessage()); }}return stmt;}public void closeStmt(){if (stmt != null){try{stmt.close();}catch (Exception e)System.err.println("Statement关闭异常");}}if (conn != null){try{conn.close();}catch (Exception e){System.err.println("数据库关闭异常");}}}public Connection getConn(){if (conn == null){try{ComboPooledDataSource ds = new ComboPooledDataSource(); ds.setDriverClass("com.mysql.jdbc.Driver");ds.setJdbcUrl("jdbc:mysql://localhost:3306/j2ee");ds.setUser("root");ds.setPassword("32147");ds.setMaxPoolSize(40);ds.setMinPoolSize(2);ds.setMaxStatements(180);conn = ds.getConnection();}catch (Exception e){e.printStackTrace();}}return conn;}}#3、Spring的JDBC体系》Spring提供的JDBC抽象框架由core、datasource、object和support4个包组成.core包含Spring JDBC抽象的核心类,包含各种SQLExceptionTranslator,用于将SQLException转化成spring的异常继承体系,还有DataFileMaxValueIncrementer实现,以及JdbcTemplate,持久层访问模板类.datasource包含简化数据源连接的工具类,以及各种数据源的简单实现.通过这些实现,spring可以在j2ee之外测试jdbc代码.通过该工具类,可以从JNDI获得连接,并可关闭连接.object包里的工具类,可将数据库的查询、更新等过程封装成类.这种方式模拟JDO的访问方式,纵横四海查询返回的"值对象"不与数据库关联.support包含了JdbcDaoSupport等工具类.底层数据库异常被包装成org.springframework.dao中的异常,是运行时异常,故,通过JDBC抽象进行的持久操作,无需处理jdbc访问特定的异常.Spring允许将包装后的异常传播到特定的层.》Spring的JDBC封装核心是JdbcTemplate,简化了JDBC的使用,可以处理数据库的连接和释放,故,可避免没有数据库关闭造成的连接泄露.使用构造器JdbcTemplate(DataSource dataSource),可通过数据源引用创建JdbcTemplate实例,实际应用中,可以通过JdbcDaoSupport取得,JdbcDaoSupport的getJdbcTemplate()方法会创建JdbcTemplate 实例,所需的数据源有JdbcDaoSupport提供.JdbcTemplate提供系列方法简化数据库访问,主要常用有:》void execute(String sql) 主要用于执行DDL语句》List query(String sql,Object[] args,RowMapper) 执行SQL查询,并将每条记录映射成bean实例,返回bean的实例集合》List queryForList(String sql,Object[] args)》Object queryForObject(String sql,RowMapper rowMapper)》int update(String sql)》int update(String sql,Object[] args)》JDBC封装的回调接口这些回调接口允许在spring的JDBC抽象体系内,使用原生JDBC查询,避免spring对JDBC封装后的灵活性不足缺点.Spring JDBC抽象体系内的回调接口有:》CallableStatementCallback:通过该接口,可使用原生的JDBC命令调用存储过程和函数》CallableStatementCreator:是JdbcTemplate使用的两个核心回调接口之一,通过该接口可以获得CallableStatement对象》PreparedStatementCallback:通过该接口,可以使用原生的JDBC命令访问数据库》PreparedStatementCreator:是JdbcTemplate使用的两个核心回调接口之一,通过该接口可以获得PreparedStatement对象》StatementCallback:作用类似PreparedStatementCallback,只是不具备预编译功能》Spring JDBC与传统JDBC对比》简化连接获取方式--无须每次采用DriverManager获得连接,也不需使用JNDI查找获得连接.Spring 的JDBC连接依赖IOC容器注入》模板化操作方式--无需繁琐的getConnection,createStatement等操作》优秀的面向对象操作方式--结果直接转化成JavaBean传出》一致的异常继承体系--无需捕获JDBC特定的数据库异常,JDBC的checked异常被包装成了Runtime 异常,不再要求强制捕捉#4、JdbcTemplate访问数据库》执行简单的查询 {API详见Spring API 2.0}int queryForXxx(String sql):静态SQL命令执行查询,Xxx可以是int或long,返回一个标量值,而且只能返回一行记录int queryForXxx(String sql,Object[] args):同上,带参数而已Object queryForObject(String sql,Class requiredType):返回执行单行单列的查询,将返回结果转换成requiredType类型的对象注:只支持特定类型的转换,比如,varchar只能转成StringList queryForList(String sql):List queryForList(String sql,Object[] args):List queryForList(String sql,Class requiredType):List queryForList(String sql, Object[] args, Class elementType):/**示例*/public class JdbcTemplateQuery{public static void main(String[] args)throws Exception{ComboPooledDataSource ds = new ComboPooledDataSource();ds.setDriverClass("com.mysql.jdbc.Driver");ds.setJdbcUrl("jdbc:mysql://localhost:3306/j2ee");ds.setUser("root");ds.setPassword("32147");ds.setMaxPoolSize(40);ds.setMinPoolSize(2);ds.setMaxStatements(180);//创建一个JdbcTemplateJdbcTemplate jt = new JdbcTemplate();//为JdbcTemplate指定DataSourcejt.setDataSource(ds);//如果只需返回一个特定值,可直接查询int count = jt.queryForInt("select count(*) from mytable");System.out.println(count);//此处的转换实际非常简单:只支持Varchar->String的转换.String nametmp = (String)jt.queryForObject("select name from mytable where name='wawa2'",String.class);System.out.println(nametmp);List namelist = jt.queryForList("select name from mytable");for (Iterator it = namelist.iterator();it.hasNext(); ){System.out.println(it.next().getClass());}//返回系列值List list = jt.queryForList("select * from mytable");for (Iterator it = list.iterator();it.hasNext(); ){System.out.println(it.next().getClass());System.out.println((Map)it.next());}}}》执行更新的int update(String sql)int update(String sql,Object[] args)int update(String sql,Object[] args,int[] argTypes):使用PreparedStatement执行更新,args 用于传入参数,argTypes指定参数的SQL类型/**示例*/public class JdbcTemplateUpdate{public static void main(String[] args)throws Exception{ComboPooledDataSource ds = new ComboPooledDataSource();ds.setDriverClass("com.mysql.jdbc.Driver");ds.setJdbcUrl("jdbc:mysql://localhost:3306/j2ee");ds.setUser("root");ds.setPassword("32147");ds.setMaxPoolSize(40);ds.setMinPoolSize(2);ds.setMaxStatements(180);//创建一个JdbcTemplateJdbcTemplate jt = new JdbcTemplate();//为JdbcTemplate指定DataSourcejt.setDataSource(ds);jt.update("update mytable set name = 'china' where name='aaa'");String[] values = {"American"} ;jt.update("update mytable set name = ? where name='china'" , values); }}》执行简单DDL的void execute(String sql)/**示例*/public class JdbcTemplateDdl{public static void main(String[] args)throws Exception{ComboPooledDataSource ds = new ComboPooledDataSource();ds.setDriverClass("com.mysql.jdbc.Driver");ds.setJdbcUrl("jdbc:mysql://localhost:3306/j2ee");ds.setUser("root");ds.setPassword("123456");ds.setMaxPoolSize(40);ds.setMinPoolSize(2);ds.setMaxStatements(180);//创建一个JdbcTemplateJdbcTemplate jt = new JdbcTemplate();//为JdbcTemplate指定DataSourcejt.setDataSource(ds);jt.execute("drop table if exists wawa");jt.execute("create table xxx(name varchar(100))");System.out.println("正常结束");}}#5、StatementCallback访问数据库JdbcTemplate对数据库访问包装,持久化操作更简单,但降低了访问的灵活性,而通过回调接口的使用,可弥补此损失.通过StatementCallback接口,可获得JdbcTemplate的Statement回调,使用原生的SQL命令,此时,同样可利用JdbcTemplate提供的系列优点,如一致的异常体系.StatementCallback回调接口只有一个方法需实现:Object doInStatement(Statement stmt)throws SQLException,DataAccessException在该方法的执行体内,可获得Statement的引用,从而完成数据库的访问./**示例*/public class ExecuteStatementCallback{public static void main(String[] args)throws Exception{ComboPooledDataSource ds = new ComboPooledDataSource();ds.setDriverClass("com.mysql.jdbc.Driver");ds.setJdbcUrl("jdbc:mysql://localhost:3306/j2ee");ds.setUser("root");ds.setPassword("32147");ds.setMaxPoolSize(40);ds.setMinPoolSize(2);ds.setMaxStatements(180);//创建一个JdbcTemplateJdbcTemplate jt = new JdbcTemplate();//为JdbcTemplate指定DataSourcejt.setDataSource(ds);jt.execute(new StatementCallback(){public Object doInStatement(Statement stmt)throws SQLException{stmt.execute("update mytable set name = 'xx' where name ='American' "); return null;}});}}程序中,通常使用StatementCallback的匿名内部类创建StatementCallback实例,实现该接口,则要求实现doInStatement(Statement stmt)方法,其方法体就是实际要执行的SQL操作#6、PreparedStatementCallback访问数据库作用类似于StatementCallback接口,只是使用了PreparedStatement对象/**示例*/public class ExecutePreparedStatementCallback{public static void main(String[] args)throws Exception{ComboPooledDataSource ds = new ComboPooledDataSource();ds.setDriverClass("com.mysql.jdbc.Driver");ds.setJdbcUrl("jdbc:mysql://localhost:3306/j2ee");ds.setUser("root");ds.setPassword("32147");ds.setMaxPoolSize(40);ds.setMinPoolSize(2);ds.setMaxStatements(180);//创建一个JdbcTemplateJdbcTemplate jt = new JdbcTemplate();//为JdbcTemplate指定DataSourcejt.setDataSource(ds);jt.execute("update mytable set name=? where name = 'xx'", new PreparedStatementCallback(){public Object doInPreparedStatement(PreparedStatement pstmt)throws SQLException{pstmt.setString(1,"-----");pstmt.execute();return null;}});}}#7、连接数据库的辅助类》DataSourceUtils工具类:通过DataSource获取连接,支持线程的绑定,如用于DataSourceTransactionManager.含有很多静态方法,主要有2个:》static Connection getConnection(DataSource dataSource)》static voic releaseConnection(Connection con,DataSource dataSource)通常情况下建议使用spring的IOC容器管理DataSource./**示例*/public class BeanTest{public static void main(String[] args)throws Exception {//创建DataSource实例ComboPooledDataSource ds = new ComboPooledDataSource(); //加载DataSource驱动ds.setDriverClass("com.mysql.jdbc.Driver");//设置连接数据库的urlds.setJdbcUrl("jdbc:mysql://localhost:3306/j2ee");//设置数据库用户名ds.setUser("root");//设置数据库密码ds.setPassword("32147");//设置池的最大连接数ds.setMaxPoolSize(40);//设置池的最小连接数ds.setMinPoolSize(2);ds.setMaxStatements(180);//以下才是真正使用Spring的JDBC的事务方法Connection conn = DataSourceUtils.getConnection(ds);java.sql.Statement stmt = conn.createStatement();stmt.execute("insert into mytable values('wddda2')"); }}通过DataSourceUtils获得连接比使用DataSource的getConnection直接获取的更智能,前者的连接在必要时自动关闭.在Spring的事务管理结合时,更具有独特的能力.》SmartDataSource接口:继承DataSource接口,提供一些额外的功能,在恰当的时候关闭连接,更加智能化.》SingelConnectionDataSource类:采用单态模式实现SmartDataSource接口/**示例*/public class BeanTest{public static void main(String[] args)throws Exception{SingleConnectionDataSource ds = new SingleConnectionDataSource();ds.setDriverClassName("com.mysql.jdbc.Driver");ds.setPassword("32147");ds.setUrl("jdbc:mysql://localhost:3306/j2ee");ds.setUsername("root");//ds.setSuppressClose(true);Connection conn = DataSourceUtils.getConnection(ds);System.out.println(conn);//java.sql.Statement stmt = conn.createStatement();//stmt.execute("insert into mytable values('w52x')");//conn.close();//conn.createStatement();System.out.println(DataSourceUtils.getConnection(ds));System.out.println(DataSourceUtils.getConnection(ds));}}》DriverManagerDataSource类继承Spring的抽象类AbstractDataSource,实际上,DriverManagerDataSource常被作为SmartDataSource的一个实现,而不是作为JDBC2.0规范的DataSource实现.因为DriverManagerDataSource并不具备连接池的能力.该类主要用于测试,它可以脱离j2ee容器独立运行,可以作为不同ApplicationContext的数据源bean,也可以和简易的JNDI环境一起工作./**示例*/public class TransactionTest{public static void main(String[] args){final ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");System.out.println("============");PlatformTransactionManager transactionManager =(PlatformTransactionManager)ctx.getBean("transactionManager");TransactionTemplate tt = new TransactionTemplate(transactionManager);tt.execute(new TransactionCallbackWithoutResult(){protected void doInTransactionWithoutResult(TransactionStatus ts){try{DataSource ds = (DataSource)ctx.getBean("dataSource");Connection conn = DataSourceUtils.getConnection(ds);java.sql.Statement stmt = conn.createStatement();stmt.execute("insert into mytable values('china')");stmt.execute("insert into mytable values('wawa2')");//让此句引发异常就可看出事务的管理 }catch (SQLException sqle){//这种方式无须显式提交,但需要在出现异常的时候显式回滚ts.setRollbackOnly();sqle.printStackTrace();}}});}}。