趁热打铁,继续学习JDBC,今天早上找了个例子
http://outofmemory.cn/code-snippet/16682/control-project-to-data-library-to
把增删改查的操作在一个例子里面调通了,记录下注意事项:
1.在eclipse中新建三个文件
文件1:Test.java(这个是个主文件)
文件2:Handle.java(Test里面会调用Handle)
文件3:TestConnection.java(Handle里面会调用TestConnection)
注意:类名和文件名必须保持一致!
代码是根据链接代码修改排除package和import之类问题的代码:
Test.java
package database_20;
import java.util.Scanner;
/**
* 测试类
* @author Administrator
*
*/
public class Test {
private static Scanner sc;
public static void main(String[] args) {
System.out.println("欢迎光临:");
//输出选项
System.out.println("1:查询 2:更新 3:插入 4:删除 5:退出");
System.out.println("你想干什么? 请选择:");
sc = new Scanner(System.in);
//实例化数据操作类Handle
Handle hd = new Handle();
int type = sc.nextInt();
/**
* 判断用户选择操作的项
*/
switch(type){
case 1:
//调用Handle查询方法
hd.query();
System.out.println("查询完成!");
break;
case 2:
//更新
hd.update();
System.out.println("更新完成!");
break;
case 3:
//插入
hd.insert();
System.out.println("插入完成!");
break;
case 4:
//删除
hd.delete();
System.out.println("删除完成!");
break;
case 5:
//退出
System.out.println("程序退出!");
System.exit(0);
break;
}
}
}
Handle.java
package database_20;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
/**
* 数据库操作类
* @author Administrator
*
*/
public class Handle {
TestConnection tc = new TestConnection();
Scanner sc = new Scanner(System.in);
/**
* 查询方法
*/
public void query() {
System.out.println("1:查询全部");
System.out.println("2:根据ID查询");
System.out.print("选择你要执行选项:");
// Scanner sc2 = new Scanner(System.in);
int type2 = sc.nextInt();
switch (type2) {
case 1:
String Sql1 = "select ID,Name,Salary,departmentId,email from employee where 1=?"; //表名在这里,这里顺序要和数据库表一致
Object[] array1 = { 1 };
List list = tc.getData(Sql1, array1);
/**
* 取键值 并打印 即为输出的列名 排列
*/
Map map2 = (Map) list.get(0);
// 存键值
Set set2 = map2.keySet();
Iterator it2 = set2.iterator();
while (it2.hasNext()) {
System.out.print("\t" + it2.next());
}
System.out.println();
//循环取出 每个行的数据
for (Object object : list) {
// list里面是map对象
Map map = (Map) object;
// 存键值
Set set = map.keySet();
Iterator it = set.iterator();
while (it.hasNext()) {
// 取键值
Object key = it.next();
// 输出 map里的数据
System.out.print("\t " + map.get(key));
}
System.out.println();
}
break;
case 2:
/**
* 根据用户输入的员工id进行查询
*/
System.out.println("输入ID:");
Object object = sc.nextInt();
Object[] array = { object };
String Sql2 = "select ID,Name,Salary,departmentId,email from employee where ID =? ";
List list2 = tc.getData(Sql2, array);
//输出列名
Map map3 = (Map) list2.get(0);
// 存键值
Set set3 = map3.keySet();
Iterator it3 = set3.iterator();
while (it3.hasNext()) {
System.out.print("\t" + it3.next());
}
System.out.println();
//循环输出数据
for (Object object2 : list2) {
// list里面是map对象
Map map4 = (Map) object2;
// 存键值
Set set4 = map4.keySet();
Iterator it4 = set4.iterator();
while (it4.hasNext()) {
// 取键值
Object key = it4.next();
// 输出 map里的数据
System.out.print("\t " + map4.get(key));
// System.out.print("\\t"+ map.get(key));
}
System.out.println();
}
break;
}
}
/**
* 更新方法
*/
public void update(){
System.out.print("请输入ID:");
Object id = sc.next();
System.out.print("请输入想更新的薪水值:");
Object salary = sc.next();
//根据用户输入的员工号来修改薪水值并判断是否执行成功
String sql = "update employee set Salary = ? where ID = ? " ;
Object [] array = { salary, id };
//使用TestConnection的update方法
int line = tc.update(sql, array);
if(line>0){
System.out.println("信息更新成功!");
}
}
/**
* 插入方法
*/
public void insert(){
System.out.print("请输入ID:");
Object id = sc.next();
System.out.print("请输入Name:");
Object name = sc.next();
System.out.print("请输入email:");
Object email = sc.next();
System.out.print("请输入Salary:");
Object salary = sc.next();
System.out.print("请输入dapartmentId:");
Object dpId = sc.next();
Object[] array = {id,name,salary,dpId,email};
//插入用户输入的数据 并判断是否执行成功
String sql = "insert into employee values(?,?,?,?,?)";
int line = tc.update(sql, array);
if(line>0){
System.out.println("插入成功!");
}
}
/**
* 删除方法
*/
public void delete(){
System.out.print("请输入想删除的员工号:");
Object id = sc.next();
Object [] array = {id};
//删除用户输入 的员工号的数据并判断是否执行成功
String sql = "delete from employee where ID = ? ";
int line = tc.update(sql, array);
if(line>0){
System.out.println("删除成功!");
}
}
}
TestConnection.java
package database_20;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestConnection {
/**
* 定义链接需要的字符串
*/
private static final String str1 = "com.mysql.jdbc.Driver";
private static final String url = "jdbc:mysql://localhost/test?useSSL=false"; //这里是数据库名
private static final String user = "root";
private static final String password = "12345678";
Connection conn;
PreparedStatement st;
ResultSet rs;
/**
* 加载驱动类
*/
static {
try {
Class.forName(str1);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 建立链接的方法
*
* @return
*/
private Connection getConnection() {
try {
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
// TODO: handle exception
}
return conn;
}
/**
* 使用prepareStatement来预编译查询语句 然后传参数的值来作为条件查询数据库 返回list
*
* @param id
* @return
*/
public List getData(String sql, Object[] array) {
// SQL语句
List list = new ArrayList();
conn = this.getConnection();
try {
// 预编译
st = conn.prepareStatement(sql);
// 利用方法传入参数
for (int i = 0; i < array.length; i++) {
st.setObject(i + 1, array[i]);
}
// 执行查询
rs = st.executeQuery();
while (rs.next()) {
Map map = new HashMap();
ResultSetMetaData rsmd = rs.getMetaData();
// 以列名为键 存储每一行数据进map
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
map.put(rsmd.getColumnName(i), rs.getObject(i));
}
// 将每一个map加入list 这样list的到就是每一行
list.add(map);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 关闭连接
this.close();
}
return list;
}
/**
* 更新数据的方法
*
* @param sql
* @param array
* @return
*/
public int update(String sql, Object array[]) {
conn = this.getConnection();
int line = 0;
try {
st = conn.prepareStatement(sql);
// 传参数
for (int i = 0; i < array.length; i++) {
st.setObject(i + 1, array[i]);
}
line = st.executeUpdate();
// 判断是否修改成功
if (line > 0) {
return line;
} else {
System.out.println("更新失败");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭连接
this.close();
}
return 0;
}
/**
* 关闭连接
*/
private void close() {
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (st != null) {
st.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
private static final String url = "jdbc:mysql://localhost/test?useSSL=false";
private static final String user = "root";
private static final String password = "12345678";
这里test
是数据库名, user
是用户名,password
是密码,都要换成自己的
2.在MYSQL中新建数据库和表,插入数据
show datebases;
create database test;
use test;
show tables;
create table employee(ID int(20) primary key auto_increment,Name varchar(20),Salary int(10),departmentId int(10),email varchar(20));
desc employee;
1.png
注意2:数据库中建表的字段顺序要和java中Handle.java
String Sql1 = "select ID,Name,Salary,departmentId,email from employee where 1=?";
这里面字段顺序要保持一致
然后向表中插入数据,如下,插入一些数据
insert into employee(ID,Name,Salary,departmentId,email) values(3,'jack',300,333,'3333@qq.com');
3.运行java中主程序
确定程序无误之后,运行Test.java,程序正确的话会发现结果如下
但是会发现这个程序存在一个问题,运行一次就自动停止了,不能持续循环多个操作
4.改进——查询直至外部停止
int index = 0; do{ 源程序} while(index != 5);
在源程序外面加上个while循环和index一直到输入中止条件
package database_20;
import java.util.Scanner;
/**
* 测试类
* @author Administrator
*
*/
public class Test {
private static Scanner sc;
public static void main(String[] args) {
int index = 0; //新增
System.out.println("欢迎光临:");
//输出选项
do{ //新增
System.out.println("1:查询 2:更新 3:插入 4:删除 5:退出");
System.out.println("你想干什么? 请选择:");
sc = new Scanner(System.in);
//实例化数据操作类Handle
Handle hd = new Handle();
int type = sc.nextInt();
/**
* 判断用户选择操作的项
*/
switch(type){
case 1:
//调用Handle查询方法
hd.query();
System.out.println("查询完成!");
index = type; //新增
break;
case 2:
//更新
hd.update();
System.out.println("更新完成!");
index = type;
break;
case 3:
//插入
hd.insert();
System.out.println("插入完成!");
index = type;
break;
case 4:
//删除
hd.delete();
System.out.println("删除完成!");
index = type;
break;
case 5:
//退出
System.out.println("程序退出!");
System.exit(0);
break;
}
}while(index != 5); //新增
}
}
网友评论