废话少说,看了尚学堂的视频以及某大神的博客,总结出以下.(本文以oracle数据库为例)
创建一个JDBC连接数据库的程序,需要着手做以下几件事情:
注意,这里边使用了java.sql.Statement; java.sql.connection;等包,为了方便这里直接使用了java.sql.*;
一.jdbc怎么识别不同数据库呢,例如oracle.mysql.等,
找到相应数据库的jdbc的类库,不同的数据库针对jdbc做出了不同的类库.找到类库以后需要找到一个driver的驱动,这个驱动就是提供jdbc来连接数据库的,那么这个驱动在哪呢?
没错,类库就是一个jar包.项目bulid path引进jar包.
然后看到该jar包下面有一个专门做驱动的类OracleDriver.class.
在要编写的JDBC连接数据的java类中引入此类:
Class.forName("oracle.jdbc.driver.OracleDriver");
//会抛出没有找到该类的异常,注意添加异常处理
或者使用
new oracle.jdbc.driver,OracleDriver();
成功加载后,会将Driver类的实例注册到DriverManager类中。
二.连接数据库
向java.sql.DriverManager请求并获得Connection对象, 该对象就代表一个数据库的连接。
String url = "jdbc:oracle:thin:@192.168.104.210:1521/orcl"; //JDBC的连接的URL String dbname = "shgbyp"; String dbpwd = "dreamsoft"; Connection conn = DriverManager.getConnection(url, dbname, dbpwd);
三.创建sql语句并执行sql语句
这里使用了java.sql.statement包;
首先创建一个statement语句
Statement stmt = conn.createStatement();
然后调用Statement对象,在Statement中有一个方法是用来执行sql语句的:
String sql ="select * from a01"
stmt.executeQuery(sql);
在这之后就又有问题了,只执行sql语句,那么我们也需要去的结果呀;
在来看操作手册中,关于executeQuery()方法有一个返回值类型:ResultSet(结果集类型)
ResultSet rs = stmt.executeQuery(sql);
现在好了,拿到了结果集,之后我们是不是需要循环遍历结果集从而拿到我们想要的结果呢?
同时把结果System.out.println();输出出来
while(rs.next()){ //比如我们以string类型只拿腌a01表中的personcode String result = rs.getString("personcde");
System.out.println(result); }
这样的话,以上是不是就完善了呢?
千万记住,在每次新建资源后要记得释放资源,以及所有中的异常处理最好用try/catch来处理!
//遵守先建后关的资管规则
//记住代码的严谨性,判空,因为如果为空,代表之前没有新建资源,就不存在关闭资源这一说法!
if(rs != null){
rs.close();
} if(stmt != null){ stmt.close();
}
if(conn != null){ conn.close();
}
四.执行程序
以上就ok啦,再接再厉!
/***************************完美分隔符,继续完善******************************/
加一.ExecuteUpdate()执行增删改语句
上边的话只是执行了查询操作,并且遍历返回了查询结果,那么,如果我需要对数据进行增删改等无返回结果的操作呢?
这时候需要使用ExecuteUpdate()方法:
String update_sql = "update a01 set personcode = '123456' where a01name = '曾建杰'"
//可以看到这句话其实是没有返回结果的
//回忆下,executeQuery的返回类型是结果集(ResultSet),而在这里,ExecuteUpdate的返回结果是int类型,而在我的理解范围内,其实返回结果类型应该是boolean类型?
int update_res = conn.ExecuteUpdate(update_sql);
//查看其是否执行 有两种办法,1是查看eclipse中的dataSource这个视图,二是查看数据库,看是否进行了操作.
加二.PreparedStatement()预编译语句
上边所写的sql语句都是赋的定值,那么如果我们换一种赋值方式呢?比如说
PreparedStatement pstmt = conn.prepareStatement("UPDATE A01 SET PERSONCODE = ? WHERE AO1name = ?");
pstmt.setString(1, "123456"); //序号,所要赋的值
pstmt.setString(2, "曾建杰");
SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。