最近在写一个Java小项目,用到了数据库连接的知识,一个多星期的使用也碰到了不少问题。这里把这一块总结一下。
本人使用的是eclipse编译器和MySQL数据库还有连接两个的数据库驱动。配置的话可以看我的另一篇连接:配置驱动
接下来就是正常的链接操作了。Java语言和数据库的连接直接有相应的实现,之后对于数据库的操作语句也是直接使用字符串的形式通过类的使用来完成,主要的又一下几步:
public class damen_01 {
// JDBC 驱动名及数据库 URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/day01";
// 数据库的用户名与密码,需要根据自己的设置
static final String USER = "root";
static final String PASS = "";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
// 注册 JDBC 驱动
Class.forName(JDBC_DRIVER);
// 打开链接
System.out.println("连接数据库...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
if(!conn.isClosed())
System.out.println("success");
// 执行查询
System.out.println(" 实例化Statement对象...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, name, url FROM websites";
ResultSet rs = stmt.executeQuery(sql);
// 展开结果集数据库
while(rs.next()){
// 通过字段检索
int id = rs.getInt("id");
String name = rs.getString("name");
String url = rs.getString("url");
// 输出数据
System.out.print("ID: " + id);
System.out.print(", 站点名称: " + name);
System.out.print(", 站点 URL: " + url);
System.out.print("\n");
}
// 完成后关闭
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
// 处理 JDBC 错误
se.printStackTrace();
System.out.println("<<<<<");
}catch(Exception e){
// 处理 Class.forName 错误
e.printStackTrace();
System.out.println("???????");
}finally{
// 关闭资源
try{
if(stmt!=null) stmt.close();
}catch(SQLException se2){
}// 什么都不做
try{
if(conn!=null) conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
}
代码是在菜鸟教程上找到的,看着来入门写点东西还是很简单的,这里就我当时的疑惑和出现错误的地方再写点注释:
一.注册驱动: 这里的注册驱动中是字符串形式,其中的字符串一般都是固定的,但是最先版的MySQL使用的不是
上面的那个,记得中间还需要加上点东西,具体的没记太清楚,不过百度一下很随意都可以搜到。一
般这里出错时间都是一下几种:
1. 驱动版本和MySQL不对照
2. 驱动没配置好
3. 该句中的字符串写错
二.打开连接: 这里主要是三给字符串代表的含义。代表意义如下:
1.以斜杠为间隔,分别代表使用的驱动的数据库类型,地址以及端口,该数据库中需要访问的数据库
名称
2.登陆的账户名称
3.该账户登陆所需密码
三.执行语句: 这里的MySQL操作命令都是以字符串命令的形式出现的,因此只需要将所需操作的命令传入一个字
符串类型的实例化对象即可,同样也可以使用 ‘+’ 符号来连接那些含有变量不确定的语句构成字符
串,例如:String sql ="select * from books where b_id='"+id+"'";
这里的ResultSet所定义的类rs代表的是查询之后返回的数据集合。
四.展开结果:使用rs.next()循环来递归得到相应数据。注意,以上这些使用过之后应该及时关闭,以免出现数
据泄露的可能。
五.抛出异常:建议使用try....catch....来处理异常,这样可以直观的看到是何种异常,进而及时的更改
大致的情况也就是这样了。接下来是一些常见的错误:
一. 数据库语句出错,这种错误出现时间输出的异常是MySQL语句错误(很容易分辨),需要认真检查。
二. 使用了PreparedStatement 类来替换 Statement类,该类方便了sql命令字符串的构造,但是需要多出预处理的过程, 可以说有利有弊吧,不够需要清楚知道该类预处理时间的操作。
三.该错误出去sql语句的错误,出现的次数可能是最多的了。是Statement类所对应SQL语句执行时使用的 executeQuery(),
executeUpdate(),execute()这三种方法,方法是有所区别的,执行select语句时间直接使用第一个即可,但是insert需要使 用第三个,update需要使用第二个。使用不当也是会出现报错。
行了,就这些吧,错误常见的目前感觉也就这些,其他的也遇到过,不过记不太清了,以后遇到了再添加吧