网上有的那些内容我就不再赘述了,只说挡住我的几个“巨坑”。
(注意,以下内容仅适用于MySQL8.0级及以上版本,JDK8及以上版本,网上的例子随影的版本大多很陈旧)
一定要安装MySQL的jdbc包,并且把这个包设置到classpath中,网上教程很多,详细内容就不说了
下面是连接数据库的一段内容:
String driver = "com.mysql.cj.jdbc.Driver";
String url= "jdbc:mysql://localhost:3306/imooc?useSSL = false&serverTimezone = UTC&";
String user = "root";
String password = "你的密码";
其中,imooc是MySQL中的数据库的名字,查看MySQL数据库有两种方法:一是用MySQL的可视化工具,如Navicat for MySQL查看,二是在cmd中输入mysql -u root -p指令后输入密码登录,然后输入show databases查看数据库。还要注意“?”后面的格式
还有一个巨坑,我觉得成熟的程序员都不会踩,但我太年轻了。。。就是建立数据库,命制表名的时候,一定要注意表名不要和数据库中的某些关键字“重名”,否则会引起一些莫名其妙的麻烦。比如我,把一个表名设置成了“table”,现在回想起来,这不作死吗?。。。唉,搞了那么长时间才发现。这个问题延展面很大,以后一定注意。
下面是我的程序,供大家参考。(在编程的过程中吸收了诸子百家的内容,我也不知道有哪些内容经过了小Copy,如发现有抄袭嫌疑请联系我)
package Mysql;
import java.sql.Statement;
import java.util.Scanner;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBCTest {
public static void main(String args[])throws SQLException, ClassNotFoundException {
boolean flag = true;
while(flag) {
System.out.println("请输入您要执行的功能(1代表新建学生信息,2代表查看所有学生信息,3代表删除学生信息,其他输入则退出):");
Scanner sc = new Scanner(System.in);
String choose = sc.nextLine();
System.out.println(choose);
if(choose.equals("1")) {
System.out.println("请输入您要新建的学生的学号:");
int no = sc.nextInt();
System.out.println(no);
System.out.println("请输入您要新建的学生的姓名:");
String name = sc.next();
System.out.println(name);
System.out.println("请输入您要新建的学生的性别:");
String sex = sc.next();
System.out.println(sex);
System.out.println("请输入您要新建的学生的年龄:");
int age = sc.nextInt();
System.out.println(age);
System.out.println("请输入您要新建的学生的专业:");
String dept = sc.next();
System.out.println(dept);
System.out.println("请输入您要新建的学生的奖励情况:");
String prize = sc.next();
System.out.println(prize);
System.out.println("\n您输入的信息是:\n" + no + "\n" + name + "\n" + sex + "\n" + age + "\n" + dept + "\n" + prize + "\n");
add(no, name, sex, age, dept, prize);
System.out.println("\n添加信息成功\n");
}
else if(choose.equals("2")) {
show();
}
else if(choose.equals("3")) {
System.out.println("请输入您要删除的学生的学号:");
int no = sc.nextInt();
del(no);
}
else {
System.out.println("您已成功退出系统");
flag = false;
}
//add(123, "张三", "男", 20, "CS", "暂无");
//update("李诗诗","lishishi@com","666");
//show();
//del(123);
}
}
//插入操作
public static int add(int no, String name,String sex, int age, String dept, String prize) {
int i=0;
String sql="insert into zhy values (?,?,?,?,?,?)";
DBConnection db = new DBConnection();
try {
PreparedStatement ptmt = (PreparedStatement) db.conn.prepareStatement(sql);
ptmt.setInt(1, no);
ptmt.setString(2, name);
ptmt.setString(3, sex);
ptmt.setInt(4, age);
ptmt.setString(5, dept);
ptmt.setString(6, prize);
ptmt.execute();
//Statement statement = (Statement) db.conn.createStatement();
//statement.executeUpdate(sql);
ptmt.close();//关闭连接
db.close();
} catch (Exception e) {
e.printStackTrace();
}
return i;//返回影响的行数,1为执行成功
}
//查找操作
public static void show(){
String sql ="select * from zhy";
DBConnection db = new DBConnection();
System.out.println("-----------------");
System.out.println("学号"+ "\t" + "姓名" +"\t"+ "性别" +"\t"+ "年龄" + "\t" + "专业" + "\t" + "奖励情况");
System.out.println("-----------------");
try {
Statement stmt = db.conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
int no = rs.getInt("no");
String name = rs.getString("name");
String sex = rs.getString("sex");
int age = rs.getInt("age");
String dept = rs.getString("dept");
String prize = rs.getString("prize");
//可以将查找到的值写入类,然后返回相应的对象
//这里 先用输出的端口显示一下
System.out.println(no +"\t"+ name +"\t"+ sex+ "\t" + age +"\t"+ dept +"\t"+ prize);
}
rs.close();
db.close();//关闭连接
} catch (SQLException e) {
e.printStackTrace();
}
}
/*
//更新操作
public static int update(int no, String name,String sex, int age, String dept, String prize) {
int i =0;
String sql="update Table set n=?,name=? where name=?";
DBConnection db = new DBConnection();
try {
PreparedStatement preStmt = (PreparedStatement) db.conn.prepareStatement(sql);
preStmt.setInt(1, no);
preStmt.setString(2, name);
preStmt.setString(3, sex);
preStmt.setInt(4, age);
preStmt.setString(5, dept);
preStmt.setString(6, prize);
preStmt.executeUpdate();
preStmt.close();
db.close();//关闭连接
} catch (SQLException e) {
e.printStackTrace();
}
return i;//返回影响的行数,1为执行成功
}
*/
//删除操作
public static int del(int no) {
int i=0;
String sql="delete from zhy where no=?";
DBConnection db = new DBConnection();
try {
PreparedStatement preStmt = (PreparedStatement) db.conn.prepareStatement(sql);
preStmt.setInt(1, no);
preStmt.executeUpdate();
System.out.println("\n删除信息成功\n");
preStmt.close();
db.close();//关闭连接
} catch (SQLException e){
e.printStackTrace();
}
return i;//返回影响的行数,1为执行成功
}
}
以下是连接数据库的部分,单独放在了一个类里面。
package Mysql;
import java.sql.*;
public class DBConnection {
String driver = "com.mysql.cj.jdbc.Driver";
String url= "jdbc:mysql://localhost:3306/imooc?useSSL = false&serverTimezone = UTC&";
String user = "root";
String password = "697098";
Connection conn;
public DBConnection() {
try {
Class.forName(driver);// 加载驱动程序
System.out.println("找到驱动程序");
}
catch(Exception e) {
System.out.println("找不到驱动程序");
}
try {
conn = DriverManager.getConnection(url, user, password);// 连续数据库
System.out.println("连接成功");
} catch (Exception e) {
e.printStackTrace();
System.out.println("连接失败");
}
}
public void close() {
try {
this.conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}