如何使用jdbc连接数据库
数据库是一个有组织的数据集合。数据库管理系统以一种与数据库格式一致的方式,提供了存储和组织数据的机制。数据库管理系统允许在不考虑内部数据表示的情况下访问和存储数据。
java程序使用JDBC API与数据库通信,并用它操纵数据库中的数据。JDBC驱动器实现与某个数据库的接口。这种API与特定驱动器的分离,使开发人员能够改变底层的数据库,而不必修改访问数据库的java代码。现在,大多数流行的数据库管理系统都包含JDBC驱动器,而且还有许多第三方JDBC驱动器。
步骤大致如下;
1,将jar包放入你要连接数据库的工程,并配置环境.
将jar包复制粘贴到工程下环境目录(如图),点击右键Build Path->add to …即可将jar包导入工程
2.使用Class类的中静态forName()方法获得与字符串对应的Class对象
public class Dbtext {public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");//这里连接的是mysql型数据库
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
因为加载”com.mysql.jdbc.Driver”字符串对应的类和接口可能会出现异常,所以加上try{}catch(){}异常处理
3,定义成员变量
Connection con = null;//定义连接con
PreparedStatement ps = null;//定义预声明ps
ResultSet rs = null;//定义结果集rs,用来接收select查询结果
常用声明有statement和PrepareStatement,他们的区别介绍网上随处可见,主要有三种。
(1)作为子类的PrepareStatement比statement有更好的性能
(2)因为不用拼接字符串也提高的代码的可读性.
(3)最主要的是PrepareStatement可以防范简单的sql注入,而statement因为涉及字符串的拼接有吧被注入风险
4,使用驱动管理器进行连接
try {
String url = "jdbc:mysql://主机名:端口名/数据库名";
String user = "你的用户名";
String password = "密码";
con = DriverManager.getConnection(url, user, password); //使用驱动管理器进行连接
String sql = "select * from animals where 产地=?";//写一句简单的sql语句
ps = con.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
使用驱动管理器连接需要路径,用户名,密码。如果你在一个工程中反复使用jdbc,还可以将其制作成工具(详见我的博客)。因为连接这一步和下面使用预声明可能会出现异常,所以需要对其加上异常处理。eclipse会在java文件中自动提示,但不会在jsp页面自动提示,如果不加就可能出现500的服务器错误.
5,用预声明执行sql
执行sql主要分两种情况
(1)增加,删除,和修改语句。
这三种语句只会返回更新的条数,不需要接收结果,如果你只使用了这三种语句,可以不用定义结果集
例:
String sql="update food set foName=?,foKind=?,foState=?,foPrice=? where foCode=?";
ps=con.prepareStatement(sql);
ps.setString(5, Code1);
ps.setString(1, Name1);
ps.setString(2, Kind1);
ps.setString(3, State1);
ps.setString(4, Price1);
ps.executeUpdate();
预声明需要把你想填入的数据先标成“ ?”,等将语句放入声明之后再填入具体数据。之后使用
声明名.executeUpdate()方法进行更新,还可以用一个整形变量接收更新了几条数据。
(2)查询语句。
这种语句需要用结果集进行接收
例:
String sql = "select * from animals where 产地=?";
ps = con.prepareStatement(sql);
ps.setString(1,"中国");
rs = ps.executeQuery();
while (rs.next()) {
//rs.next()方法十分重要,不写会出现异常
System.out.println(rs.getInt("ID"));
System.out.println(rs.getString("名称"));
System.out.println(rs.getString("科"));
System.out.println(rs.getInt("数量"));
System.out.println(rs.getString("产地") + "\n\n");
}
查询语句是十分重要的语句,一般用在jsp页面的显示。使用方法是先更新队列,同时用结果集rs接收,然后用rs.next()方法定义指向,每调用一次,指针会指向表中下一个元素。对某个元素的信息,使用.get数据类型()的方法进行接收
6,使用完毕,关闭资源
finally {
try {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (con != null) {
con.close();
}
}catch (SQLException e) {
e.printStackTrace();
}
}
}
}