如何的连接数据库,在java中,连接数据库采用的是官方提供的JDBC技术作为java访问数据库的标准接口,不同的数据库可以利用不同的数据库驱动对数据库进行操作,例如利用mysql-connector-java-5.1.7-bin组件,可以对mysql进行操作。
使用JDBC连接数据库有六步操作:
1.加载驱动。首先要加载数据库驱动,可以到数据库厂商的官方网站上下载,之后放在工程里面,一般建立一个bin目录,将组件放在bin目录下面,然后就可以加载数据库驱动,常见的加载数据库驱动的方法是Class.forName(“驱动程序完全限定名”);将驱动类的完全限定名作为参数,如:
Class.forName(“com. mysql.jdbc.Driver”);
com.mysql.jdbc.Driver为mysql的完全限定名,数据库驱动加载一次即可完成整个数据可访问过程。
2.建立连接。之后建立与数据库的连接,例如:
String url ="jdbc:mysql://localhost:3306/blog?characterEncoding=GBK";
Connection conn =DriverManager.getConnection(url, "root","rootroot");
其中url为连接路径,localhost为连接本机,也可以写IP地址,3306为数据库连接的端口,blog为数据库的名字,里面包含若干的数据表,后面的connection为获取连接,root为数据库的用户名,rootroot为连接数据库的密码。
3.生成sql语句。
生成sql语句,包括增删改查,其实所有的sal语句都为拼出来的字符串,还可以传参数,例如:
String sql = "insert into test values(4,'tom',21)" ;//插入数据
String sql="update test set tname='sally',tage=20 wheretid=2";//修改数据
4.执行sql语句
Statement stmt =conn.createStatement();
int rows =stmt.executeUpdate(sql);// 可以执行insert,update,delete语句,返回执行的数据库表的行数
其中增删改操作用的是executeupdate.若是查询操作则应该使用executeQuery(sql).切返回值是一个集合,要用相应的类产生的对象接受。
5.处理执行的结果
就是对4中的rows进行处理,也就是判断,
if (rows > 0){
System.out.println("成功");
}else {
System.out.println("失败");
}
6.关闭数据库的连接,
stmt.close();
conn.close();
数据库使用完毕后要关闭与数据库的连接,释放资源。
如下两例:
(1).数据库的增删改操作:
public static void main1(String[] args){
// 1.确定驱动程序,并且加载驱动程序
// com.mysql.jdbc.Driver
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
// 异常处理
e.printStackTrace();// 把错误信息输出到控制台
}
// System.out.println("数据库驱动加装成功");
try {
// 2.建立与数据库的连接
String url ="jdbc:mysql://localhost:3306/blog?characterEncoding=GBK";
Connection conn = DriverManager.getConnection(url,"root",
"rootroot");
// 3.生成sql语句
//String sql = "insert into test values (4,'tom',21)";
//String sql="update test set tname='sally',tage=20 wheretid=2";
String sql="delete from test where tid=1";
Statement stmt = conn.createStatement();
// 4.执行sql语句
int rows = stmt.executeUpdate(sql);// 可以执行insert,update,delete语句,返回执行的数据库表的行数
// 5.处理执行的结果
if (rows > 0) {
System.out.println("成功");
} else {
System.out.println("失败");
}
// 6.关闭与数据库的连接
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
(2).数据库的查询操作:
public static voidmain(String[] args) {
//1.加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
// 异常处理
e.printStackTrace();// 把错误信息输出到控制台
}
try {
//2.建立连接
String url ="jdbc:mysql://localhost:3306/blog?characterEncoding=GBK";
Connection conn = DriverManager.getConnection(url,"root",
"rootroot");
String sql="select * fromtest";
Statement stmt=conn.createStatement();
ResultSet rs= stmt.executeQuery(sql);//执行查询语句,select
while(rs.next())
{
int id=rs.getInt("tid");
String tname=rs.getString("tname");
int tage=rs.getInt("tage");
System.out.println("id:"+id+",name:"+tname+",tage:"+tage);
}
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在实际项目中,这些操作只需要写在一个类中作为父类,用时子类继承父类的内容,可以减少代码的编写量,并且在事物处理中,一个事物只需建立一次连接就可以了,不需要重复连接和关闭,并且在父类中,重写executeUpdate(Stringsql,Object…args)和executeQuery(String sql,Object…args),这样在使用时,就直接可以传参数,减少了很多的代码,以下将重写的代码写出:
//修改,更新,增加
public int executeUpdate(String sql,Object...args)
{
Connection conn=null;
PreparedStatement pst=null;
try {
conn=this.getConnection();
pst=conn.prepareStatement(sql);
if(args!=null)
{
for (int i = 0; i < args.length; i++) {
pst.setObject(i+1, args[i]);
}
}
introws=pst.executeUpdate();
return rows;
} catch(SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally
{
this.close(pst);
//this.close(conn);
}
return -1;
}
public static interface RowMapper
{
public Object rowMapper(ResultSetrs)throws SQLException;
}
//查找
public List
ListnewArrayListConnection conn=null;
PreparedStatement pst=null;
ResultSet rs=null;
try {
conn=this.getConnection();
pst=conn.prepareStatement(sql);
if(args!=null)
{
for (int i = 0; i < args.length; i++) {
pst.setObject(i+1, args[i]);
}
}
rs=pst.executeQuery();
while(rs.next())
{
Object result=mapper.rowMapper(rs);
list.add(result);
}
} catch(SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
this.close(rs);
this.close(pst);
//this.close(conn);
}
return list;
}
理论只是理论,项目才使程序员成长,以上内容纯属个人手工编写,属于个人学习笔记,只为以后发展开方便之门,有不正确或不足的地方,望各路大侠批评指正。