总是听到同学们说Java连接数据库就那么几行代码,但到底是几行代码,每行代码有什么作用,这次学习用到了数据库的内容就学习了一下数据库,经过前几天你的忙乱,今天我就好好的总结一下,算是对下面学习的回顾。
使用Java来连接数据库有两种方式,一种是使用jdbc-odbc桥连的方式来操作sql server 数据库(表),其图示如下:
另一种方法就是用jdbc驱动程序直接操作sql server数据库(表)。
既然是学习那么两种方法都会总结,但第二种方法操作简单快捷,使用Java连接数据库的时候通常使用jdbc去驱动程序直接操作。
一、首先来说第一种方法,为了能成功连接数据库,首先是配置数据源环境,具体步骤如下:
下面的工作按要求填写即可,但在填写不能直接点击下拉框,这样子会搜索局域网内所有的服务器,搜索时间长,甚至可能引起死机。。。这里要尤为注意!在这里可以使用“.”或者“local”来完成。然后就是代码了,编程思想和代码是这样子的:
其中表的结构是:
import java.sql.*;
public class jdbcodbc {/** * 演示使用jdbc-odbc桥连方式操作数据库spdb * 1.配置数据源 * 2.在程序中连接数据源 * @throws SQLException * */public static void main(String[] args) {Connection ct=null;Statement sm=null;ResultSet rs=null;try {//1.加载驱动(作用是把需要的驱动程序加入内存)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//2.得到连接(引包)[指定连接到那个数据源"sa""sa"是用户名和密码]//如果配置数据源使用windows nt就不需要用户名和密码ct=DriverManager.getConnection("jdbc:odbc:mytest","sa","sa");//3.创建statement或者PreparedStatement[区别]//Statement 主要用于发送sql语句到数据库sm=ct.createStatement();//4.执行(创建,备份,删除数据)//1.添加一条数据到dept表,可以用executeUpdate()执行cud(添加、删除、修改)int i=sm.executeUpdate("insert into dept values(7,spy,linweieran)");if(i==1){System.out.println("添加OK");}else{System.out.println("添加失败");}//2.查询数据库,显示所有的部门信息//rs是一个结果集,指向第一行记录的最上面rs=sm.executeQuery("select * from dept");while(rs.next()){int deptno =rs.getInt(1);String dname=rs.getString(2);String loc=rs.getString(3);System.out.println(deptno+" "+dname+" "+loc);}} catch (Exception e) {e.printStackTrace();}finally{//关闭资源[关闭顺序是:谁后创建,谁先关闭]try {if(sm!=null){ //为了程序健壮sm.close();}if(ct!=null){ct.close();}} catch (SQLException e) {e.printStackTrace();}}}}
正如在程序中所写那样,Statement和PreparedStatement是有区别的,主要区别如下:(1)直接使用Statement驱动程序不会对sql语句做处理而直接交给数据库;使用PreparedStatement形成预编译过程,而且对字符进行装换,这预编译的好处学计算机的都应该知道了。(2)PreparedStatement可以有效防止危险字符的注入。那么使用PreparedStatement的编程是:
public static void main(String[] args) {但运行的时候问题来了,会显示错误: java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓冲区长度, 这是因为出现这种情况的原因就是windows 64位系统的默认数据源设置是64位的,在控制面板进入之后设置数据源会发现不会显示多有的数据驱动,其实ODBC 不适合直接在 Java 中使用,因为它使用 C 语言接口。从Java 调用本地 C代码在安全性、实现、坚固性和程序的自动移植性方面都有许多缺点。从 ODBC C API 到 Java API 的字面翻译是不可取的。例如,Java 没有指针,而 ODBC 却对指针用得很广泛(包括很容易出错的指针"void *")。您可以将 JDBC 想象成被转换为面向对象接口的 ODBC,而面向对象的接口对 Java程序员来说较易于接受。 (二)所以我们就使用第二种方法,使用jdbc直接驱动,首先引入包,如下截图:
Connection ct=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
//1.加载驱动(作用是把需要的驱动程序加入内存)
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//2.得到连接(引包)[指定连接到那个数据源"sa""sa"是用户名和密码]
//如果配置数据源使用windows nt就不需要用户名和密码
ct=DriverManager.getConnection("jdbc:odbc:mytest","sa","sa");
//3.创建statement或者PreparedStatement[区别]
//prepareStatement 主要用于发送sql语句到数据库
ps=ct.prepareStatement(null);
int i=ps.executeUpdate("insert into dept values(7,spy,linweieran)");
//1.添加一条数据到dept表,可以用executeUpdate()执行cud(添加、删除、修改)
if(i==1){
System.out.println("添加OK");
}else{
System.out.println("添加失败");
}
//2.查询数据库,显示所有的部门信息
//rs是一个结果集,指向第一行记录的最上面
rs=ps.executeQuery("select * from dept");
//ps.setString(1,'aaa');
while(rs.next()){
int deptno =rs.getInt(1);
String dname=rs.getString(2);
String loc=rs.getString(3);
System.out.println(deptno+" "+dname+" "+loc);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭资源[关闭顺序是:谁后创建,谁先关闭]
try {
if(rs!=null){
rs.close();
}
if(ps!=null){ //为了程序健壮
ps.close();
}
if(ct!=null){
ct.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
需要修改的代码也很少,
//1.加载驱动(作用是把需要的驱动程序加入内存)
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
其余的都是一样的。 这就是Java连接数据库的两种方法。