2、几个常用的重要技巧:可滚动、更新的记录集 、 批量更新 、事务处理1、取得数据库连接1)用DriverManager取数据库连接例子:String className,url,uid,pwd
className = "oracle.jdbc.driver.OracleDriver"
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr
uid = "system"
pwd = "manager"
Class.forName(className)
Connection cn = DriverManager.getConnection(url,uid,pwd)2)用jndi(java的命名和目录服务)方式例子String jndi = "jdbc/db"
Context ctx = (Context) new InitialContext().lookup("java:comp/env")
DataSource ds = (DataSource) ctx.lookup(jndi)
Connection cn = ds.getConnection() //多用于jsp中2、执行sql语句1)用Statement来执行sql语句String sql
Statement sm = cn.createStatement()
sm.executeQuery(sql)// 执行数据查询语句(select)
sm.executeUpdate(sql)// 执行数据更新语句(delete、update、insert、drop等)statement.close()2)用PreparedStatement来执行sql语句String sql
sql = "insert into user (id,name) values (?,?)"
PreparedStatement ps = cn.prepareStatement(sql)
ps.setInt(1,xxx)
ps.setString(2,xxx)
...
ResultSet rs = ps.executeQuery()// 查询
int c = ps.executeUpdate()// 更新3、处理执行结果查询语句,返回记录集ResultSet。更新语句,返回数字,表示该更新影响的记录数。ResultSet的方法:1、next(),将游标往后移动一行,如果成功返回true;否则返回false。2、getInt("id")或getSting("name"),返回当前游标下某个字段的值。3、释放连接。cn.close()一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection可滚动、更新的记录集1、创建可滚动、更新的StatementStatement sm=cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,
ResultSet.CONCUR_READ_ONLY)该Statement取得的ResultSet就是可滚动的2、创建PreparedStatement时指定参数PreparedStatemet ps=cn.prepareStatement(sql,
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)ResultSet.absolute(9000)批量更新1、StatementStatement sm = cn.createStatement()
sm.addBatch(sql1)
sm.addBatch(sql2)
...
sm.executeBatch()一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有2、PreparedStatementPreparedStatement ps = cn.preparedStatement(sql)
{
ps.setXXX(1,xxx)
...
ps.addBatch()
}
ps.executeBatch()一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。事务的处理1、关闭Connection的自动提交cn.setAutoCommit(false)2、执行一系列sql语句要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先closeStatement sm
sm = cn.createStatement(insert into user...)
sm.executeUpdate()
sm.close()sm = cn.createStatement("insert into corp...)
sm.executeUpdate()
sm.close()3、提交cn.commit()
import java.sql.ResultSet//都是导入一些下面需要用到的类String ConnStr="jdbc:microsoft:sqlserver://WINJUE:1433DatabaseName=library"//jdbc连接数据库url
public sqlServer() {
try {
Class.forName(DBDriver).newInstance() //加载SQLServer驱动程序,DBDriver是你上面的代码
conn=DriverManager.getConnection(ConnStr,"sa","sa")//和数据库建立连接,ConnStr里面的://WINJUE:1433DatabaseName=library 分别是主机地址:端口号你自己建的数据库(database)
}
catch(SQLException e) { //捕获SQL异常
System.out.println(e.getMessage())//要是出现异常,捕获到后,这句代码会把异常的信息(出错的原因之类的)打印出来。
}
catch(Exception e) { //捕获异常,这个是总的,所以不能和上面的顺序颠倒,先小到大,我连ORACLE和MYSQL,这个我通常不要,只须捕获SQL异常就OL
System.out.println(e.getMessage())
}
}
public Connection getConn(){ //获取连接方法
return conn
}
public void insert(String sql) {//增删改
try {
Statement stm=conn.createStatement()调用conn下的方法,创建Statement对象
stm.executeUpdate(sql)//调用Statement下的方法执行SQL语句
System.out.println(" *** 作成功")
}
catch(Exception e){
System.out.println(e.getMessage())//如上
}
}
public ResultSet query(String sql){ //查询
try{
Statement stm=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE)
rs=stm.executeQuery(sql)//如上
}
catch(Exception e){
System.out.println(e.getMessage())
}
return rs
}
public static void main(String args[]){
sqlServer conn=new sqlServer()//创建sqlServer,就是你上面的类,以便调用里面的方法
ResultSet rs=conn.query("select * from Orders")//调用query方法,执行SQL语句后,把结果保存到结果集里
//conn.insert("delete from BookInfo where BookName =" +"\'悟空传\'")
//conn.insert("insert into BookInfo (BookID,BookName,Author,KeyWord) values (14445678,'悟空传','今何在','孙悟空')")
try{
while(rs.next()){ //循环,判断结果集里的记录,一条条往下走,是否还有下一条记录,若是返回真,继续走
System.out.print(rs.getString("OrderID"))
//System.out.print(rs.getString("U_age"))
}
rs.close() //关闭结果集
}
catch (Exception e){
System.out.println(e.getMessage())
}
}
}
注:
TYPE_FORWARD_ONLY:缺省类型。只允许向前访问一次,并且不会受到其他用户对该数据库所作更改的影响。
TYPE_SCROLL_INSENSITIVE:允许在列表中向前或向后移动,甚至能进行特定定位,例如移至列表中的第四个记录或从当前位置向后移动两个记录。不会受到其他用户对该数据库所作更改的影响。
TYPE_SCROLL_SENSITIVE:象 TYPE_SCROLL_INSENSITIVE 相同,允许在记录中定位。这种类型受到其他用户所作更改的影响。如果用户在执行完查询之后删除一个记录,那个记录将从 ResultSet 中消失。类似的,对数据值的更改也将反映在 ResultSet 中。
两种方式:1、JDBC-ODBC连接,也叫桥连接。驱动字符串:sun.jdbc.odbc.JdbcOdbcDriver连接字符串:JDBC:ODBC:数据源名称 2、JDBC,也叫直连接需要驱动包,并且要将驱动包复制到:JDK安装路径\jre\lib\ext\下,或通过IDE将驱动包加载到程序的构建路径中。常用的数据库的连接方式:1)Microsoft SQLServer驱动字符串:com.microsoft.jdbc.sqlserver.SQLServerDriver连接字符串:JDBC:MICROSOFT:SQLSERVER://主机名:端口号databasename = 数据库名称2)ORACLE (a) thin连接 驱动字符串:oracle.jdbc.driver.OracleDriver 连接字符串:JDBC:ORACLE:thin:@主机名:端口号:数据库SID (b) oci8连接 驱动字符串: oracle.jdbc.driver.OracleDriver 连接字符串 :JDBC:ORACLE:oci8:@网络服务名3)My SQL 驱动字符串:com.mysql.jdbc.Driver 连接字符串:JDBC:MYSQL://主机名:端口号/数据库名?useUnicode=true&characterEncoding=utf-8欢迎分享,转载请注明来源:内存溢出
评论列表(0条)