MySQL驱动程序添加到eclipse中后,就可以尝试在eclipse中使用数据库了。
1、加载驱动程序
驱动程序地址:com.mysql.jdbc.Driver
用Class类加载驱动程序,如下
package test;
public class TestClass {
public static String Driver="com.mysql.jdbc.Driver"; //数据库驱动软件中地址
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Class.forName(Driver); //加载驱动程序
System.out.println("success");
}catch(Exception w) {
w.printStackTrace();
System.out.println("****");
}
}
}
输出“success”表示加载成功。
2、连接和关闭数据库
eclipse中提供了DriverManager类连接数据库,通过getConnection()方法取得连接对象,返回一个Connection对象。
getConnection()方法中的参数为MySQL的连接地址、用户名和密码。
MySQL数据库的连接地址格式为
jdbc:mysql://IP地址:端口号/数据库名称
如果是本机中的数据库,IP地址为localhost,端口号为3306。
我的数据库名:root,密码:123456。建立了一个数据库bb,并在其中建表b2,添加数据。查询效果:
之后的操作都基于这个数据库。所以我的连接地址为:jdbc:mysql://localhost:3306/bb
在eclipse中连接和关闭数据库:
package test;
import java.sql.Connection;
import java.sql.DriverManager;
public class StartClass {
public static final String Driver="com.mysql.jdbc.Driver";
public static final String URL="jdbc:mysql://localhost:3306/bb";
//格式 jdbc:mysql://IP地址:端口号/数据库名称
public static void main(String args[]) {
Connection con=null;
try {
Class.forName(Driver);
}catch(Exception e) {
e.printStackTrace();
}
try {
con=DriverManager.getConnection(URL,"root","123456"); //数据库地址,数据库用户名,密码
System.out.println("***");
}catch(Exception e) {
e.printStackTrace();
}
System.out.println(con);
try {
con.close(); //关闭数据库
}catch(Exception e) {
e.printStackTrace();
}
}
}
输出不为空,表示连接成功:
***
com.mysql.jdbc.JDBC4Connection@5910e440
建议用完数据库后删除,避免占用较大资源。
3、数据库更新数据
数据的更新需要用Statement接口完成,通过Connection接口中提供的createStatement实例化。
3.1、数据插入
首先是实例化一个Statement,然后是数据库建表中的数据插入命令,将该命令添加到Statement类的executeUpdate()方法中。
看一个例子:
package test;
import java.sql.*;
public class InsertClass {
public static void main(String[] args) {
//插入数据
Connection con=null;
Statement state=null; //使用statement接口
String str=" insert into b2 (id,age,name,sex) values (5,19,'Jone','nan') "; //插入语句
//这里的插入数据也可以用变量带入
try {
Class.forName("com.mysql.jdbc.Driver"); //驱动程序
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/bb","root","123456"); //连接数据库
state=con.createStatement(); //实例化statement对象
state.executeUpdate(str); //插入数据
state.close();
con.close();
System.out.println("success");
}catch(Exception e) {
e.printStackTrace();
System.out.println("*****");
}
}
}
运行成功后,在命令行中查询:
3.2、数据修改
和插入语句步骤相同,只要把SQL语句改为update即可。
public class UpdateClass {
//更新数据
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection con=null;
Statement state=null; //使用statement接口
String name="Jane";
int age=19;
int id=5;
//String str="update b2 set name='Jane',age=17 where id=5";
String str= " update b2 set name=' " + name + " ',age= " + age + " where id=" +id ;
//两条更新语句效果相同。
try {
Class.forName("com.mysql.jdbc.Driver"); //驱动程序
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/bb","root","123456"); //连接数据库
state=con.createStatement(); //实例化statement对象
state.executeUpdate(str); //插入数据
state.close();
con.close();
System.out.println("success");
}catch(Exception e) {
e.printStackTrace();
System.out.println("*****");
}
}
}
运行成功后,结果:
3.3、数据删除
同理,修改数据库指令。
package test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class DeleteClass {
//删除数据
public static void main(String[] args) {
Connection con=null;
Statement state=null; //使用statement接口
String str=" delete from b2 where id=5 "; //插入语句
//这里的插入数据也可以用变量带入
try {
Class.forName("com.mysql.jdbc.Driver"); //驱动程序
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/bb","root","123456"); //连接数据库
state=con.createStatement(); //实例化statement对象
state.executeUpdate(str); //删除数据
state.close();
con.close();
System.out.println("success");
}catch(Exception e) {
e.printStackTrace();
System.out.println("*****");
}
}
}
运行成功后,再查询结果如下:
4、查询数据
查询数据库数据,需要用到select语句,同时,查询到的记录也应使用ResultSet进行接收。
package test;
import java.sql.*;
public class SelectClass {
//查询数据
public static void main(String[] args) {
Connection con=null;
Statement state=null;
ResultSet rs=null;
String str="select * from b2";
try {
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/bb","root","123456");
state=con.createStatement();
rs=state.executeQuery(str); //查询结果用ResultSet接收
while(rs.next()) { //将指针指向下一行
int id=rs.getInt("id"); //读取内容
int age=rs.getInt("age");
String name=rs.getNString("name");
String sex=rs.getString("sex");
System.out.println("id:"+'\t'+id+'\t' + "age:"+'\t'+age+'\t' + "name:"+'\t'+name+'\t' + "sex:"+'\t' +sex);
int id1=rs.getInt(1);
//按表中列的编号读取,与上一种方法效果相同,建议用这种
int age1=rs.getInt(2);
String name1=rs.getNString(3);
String sex1=rs.getString(4);
System.out.println("id:"+'\t'+id1+'\t' + "age:"+'\t'+age1+'\t' + "name:"+'\t'+name1+'\t' + "sex:"+'\t' +sex1);
}
rs.close();
state.close();
con.close();
}catch(Exception e) {
e.printStackTrace();
System.out.println("*****");
}
}
}
运行结果:
id: 1 age: 16 name: sd sex: ga
id: 1 age: 16 name: sd sex: ga
id: 2 age: 18 name: nalk sex: sjd
id: 2 age: 18 name: nalk sex: sjd
id: 3 age: 0 name: sd sex: null
id: 3 age: 0 name: sd sex: null
id: 4 age: 0 name: wdv sex: null
id: 4 age: 0 name: wdv sex: null
5、预处理操作
PreparedStatement接口
SQL语句中的内容暂时不设置,用“?”来代指,等用到时再进行设置。
如: select name,age from user where id=? 。
预处理的设置是通过setString()、setInt()等方法实现。其中的参数,第一个表示要设置的索引编号,也即表中第几列的字段,第二个表示设置的内容。
package test;
import java.sql.*;
public class PrepareClass {
//预处理,用PreparedStatement接口实现
public static void main(String args[]) {
Connection con=null;
PreparedStatement ps=null;
Statement state=null;
ResultSet rs=null;
String str="insert into b2 values (?,?,?,?)"; //用?定义预处理的项
String str1="select * from b2";
String str2="delete from b2 where id=?";
try {
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/bb","root","123456");
ps=con.prepareStatement(str);
ps.setInt(1, 5); //实例化预处理,第一个变量指定索引的编号,第二项为设置的内容。
ps.setInt(2, 15);
ps.setString(3, "JAM");
ps.setString(4, "nv");
ps.executeUpdate();
state=con.createStatement();//查询结果
rs=state.executeQuery(str1);
while(rs.next()) { //将指针指向下一行
int id1=rs.getInt(1); //按列的编号读取
int age1=rs.getInt(2);
String name1=rs.getNString(3);
String sex1=rs.getString(4);
System.out.println("id:"+'\t'+id1+'\t' + "age:"+'\t'+age1+'\t' + "name:"+'\t'+name1+'\t' + "sex:"+'\t' +sex1);
}
ps=con.prepareStatement(str2);
ps.setInt(1, 5);
ps.executeUpdate();
System.out.println("---------------------------------------------------------------");
rs=state.executeQuery(str1);
while(rs.next()) { //将指针指向下一行
int id1=rs.getInt(1); //按列的编号读取,与上一种方法效果相同,建议用这种
int age1=rs.getInt(2);
String name1=rs.getNString(3);
String sex1=rs.getString(4);
System.out.println("id:"+'\t'+id1+'\t' + "age:"+'\t'+age1+'\t' + "name:"+'\t'+name1+'\t' + "sex:"+'\t' +sex1);
}
rs.close();
ps.close();
state.close();
con.close();
}catch(Exception e) {
e.printStackTrace();
System.out.println("*****");
}
}
}
运行结果如下:
id: 1 age: 16 name: sd sex: ga
id: 2 age: 18 name: nalk sex: sjd
id: 3 age: 0 name: sd sex: null
id: 4 age: 0 name: wdv sex: null
id: 5 age: 15 name: JAM sex: nv
---------------------------------------------------------------
id: 1 age: 16 name: sd sex: ga
id: 2 age: 18 name: nalk sex: sjd
id: 3 age: 0 name: sd sex: null
id: 4 age: 0 name: wdv sex: null