160 likes | 413 Views
JDBC 应用. JDBC 开发步骤. 1 )载入 JDBC 驱动程序 com.microsoft.jdbc.sqlserver.SQLServerDriver 2 )创建数据库的连接 jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=GT 3 )创建语句对象 4 )利用语句对象执行 SQL 语句得到结果 5 )处理结果 6 )关闭资源. JDBC 主要接口. java.sql.DriverManager 用于处理驱动程序的调入并且对新的数据库连接提供支持。 java.sql.Connection
E N D
JDBC开发步骤 1)载入JDBC驱动程序 com.microsoft.jdbc.sqlserver.SQLServerDriver 2)创建数据库的连接 jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=GT 3)创建语句对象 4)利用语句对象执行SQL语句得到结果 5)处理结果 6)关闭资源
JDBC 主要接口 java.sql.DriverManager 用于处理驱动程序的调入并且对新的数据库连接提供支持。 java.sql.Connection 指应用程序与特定数据库的连接。 java.sql.Statement 用于一般sql语句的执行(可以是查询、更新甚至可以创建数据库的执行过程) java.sql.ResultSet 查询所返回的结果保存在此对象中,用它可以浏览和存取数据库内的记录。
package org.gt.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DataBaseConnection { private final String DBDRIVER = "com.microsoft.jdbc.sqlserver.SQLServerDriver" ; private final String DBURL = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=GT" ; private final String DBUSER = "sa" ; private final String DBPASSWORD = "sa" ; private Connection conn = null ; public DataBaseConnection() { try { Class.forName(DBDRIVER) ; this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ; } catch (Exception e) { e.printStackTrace(); } } public Connection getConnection() { // TODO Auto-generated method stub return this.conn; } public void close() { try { this.conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
SQL语句 1)插入语句 sql = “INSERT INTO person (name,password,age) VALUES (‘jida’,‘123’,28)” ; 2)更新语句 sql = “UPDATE person SET name=‘jim’,password=‘403’ WHERE id=3” ; 3)按ID删除记录 sql =“DELETE FROM person WHERE id=4” ; 4)查询 sql=“SELECT * FORM person”;
使用JDBC进行增加、修改、删除数据时用--->executeUpdate(sql);使用JDBC进行增加、修改、删除数据时用--->executeUpdate(sql); • 使用JDBC查询用,--->executeQuery(sql); 返回的为ResultSet对象。
结果集ResultSet的处理 • 使用getXXX()方法可以得到不同类型的结果值(参数可以是字段名或编号) • next()方法可以是游标移动到下一条记录
使用Statement时需要一个完整的SQL语句,但是如果其中包含“‘”,会造成输入的不正确使用Statement时需要一个完整的SQL语句,但是如果其中包含“‘”,会造成输入的不正确 解决方法:使用--->PreparedStatement
PreparedStatement对象和Statement对象类似, 都可以用来执行SQL语句。不同在于,数据库会对PreparedStatement的SQL语句进行预编译,而且仍旧能输入参数并重复执行编译好的查询速度比未编译的要快。PreparedStatement stmt=con.preparedStatement("Insert Into users(userid, username) values(?,?)");stmt.clearParameters();stmt.setInt(1,2);stmt.setString(2,"Big");stmt.executeUpdate();
sql=“insert into person(name,password,age) values(?,?,?)”; stmt=conn.preparedStatement(sql); stmt.setString(1,”jida”); …. stmt.executeUpdate();
PreparedStatement pstmt = null ; DataBaseConnection1 dbc = null ; String sql=""; try { // 连接数据库 dbc = new DataBaseConnection1() ; pstmt=dbc.getConnection().prepareStatement(sql); … } catch (Exception e) { thrownew Exception("操作出现异常") ; } finally { // 关闭数据库连接 dbc.close() ; }
Statement stmt=con.getStatement("游标类型", "记录更新权限");游标类型:ResultSet.TYPE_FORWORD_ONLY:只可以向前移动ResultSet.TYPE_SCROLL_INSENSITIVE:可卷动。但是不受其他用户对数据库更改的影响。ResultSet.TYPE_SCROLL_SENSITIVE:可卷动。当其他用户更改数据库时这个记录也会改变。记录更新权限:ResultSet.CONCUR_READ_ONLY,只读ResultSet.CONCUR_UPDATABLE,可更新 getStatement()缺省参数:getStatement(ResultSet.TYPE_FORWORD_ONLY, ResultSet.CONCUR_READ_ONLY)
批处理 • 可以让一个Statement同时执行多个SQL语句,以提高性能。 • 事务处理 事务:在数据库批处理操作时,要么全部执行成功,要么全部失败。 可以保证数据的完整性
try { stmt = conn.createStatement() ; // 取消自动提交 conn.setAutoCommit(false) ; stmt.addBatch("INSERT INTO person (name,password,age) VALUES (‘jida1','zzzzzz',25)") ; stmt.addBatch("INSERT INTO person (name,password,age) VALUES (‘jida2','zzzzzz',26)") ; stmt.addBatch("INSERT INTO person (name,password,age) VALUES (jida3','zzzzzz',27)") ; stmt.addBatch("INSERT INTO person (name,password,age) VALUES (‘jida4','zzzzzz',28)") ;
// 执行批处理语句 stmt.executeBatch() ; // 如果没有异常,则执行此段代码 // 提交事务,真正向数据库中插入数据 conn.commit() ; } catch(Exception e) { // 将数据库回滚 try { conn.rollback() ; } catch(Exception e1) {} out.println("操作数据库失败!!!") ; }