1、建立一个用户表(数据表和表中的数据列由用户自行创建),表的名称和列的定义都使用键盘输入,并在数据库中创建此表。
2、编写一个程序,可以通过此程序完成一个表的创建操作,输入表名称、各个列的名称及类型,输入完成后直接通过 JDBC 创建指定的表。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class Main {
public static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";
public static final String DBURL = "jdbc:mysql://localhost:3306/sqldatabase";
public static final String DBUSER = "root";
public static final String DBPASS = "mysql1234";
public static void main(String[] args) throws Exception {
Connection conn = null;
Statement stmt = null;
String sql = "CREATE TABLE table2(" +
"id INT AUTO_INCREMENT PRIMARY KEY ," +
"name VARCHAR(30) NOT NULL ," +
"password VARCHAR(32) NOT NULL ," +
"age INT NOT NULL ," +
"sex VARCHAR(2) DEFAULT '男' ," +
"birthday DATE " +
") ";
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
stmt = conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
}
3、使用键盘输入流,接受一段数据,并输入一个图片路径,之后将这些数据保存在数据表中,数据表用户自行创建。
//源代码链接:https://blog.youkuaiyun.com/qq_25345343/article/details/84570558
//源代码链接:https://blog.youkuaiyun.com/qq_25345343/article/details/84570558
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/sqldatabase";
// MySQL数据库的连接用户名
public static final String DBUSER = "root";
// MySQL数据库的连接密码
public static final String DBPASS = "mysql1234";
class InputData {// 数据输入类
BufferedReader buf = null;// 声明BufferedReader对象
public InputData() {// 通过构造方法初始化对象
buf = new BufferedReader(new InputStreamReader(System.in));
}
public String getString(String info) {// 从方法中得到字符串的信息
String temp = null;
System.out.print(info);
try {
temp = this.buf.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return temp;
}
public File getPhoneDir(String info, String err) {// 得到一个图片路径
File file = null;
String str = null;
boolean flag = true;// 定义一个循环处理的标志
while (flag) {
str = this.getString(info);
file = new File(str);
if (file.isFile() && file.toString().matches(".+\\.(jpg|png|jpeg|gif)")) {
flag = false;
} else {
System.out.println(err);
}
}
return file;
}
}
public static void main(String[] args) {
Connection conn = null;// 数据库连接
try {
Class.forName(DBDRIVER);// 加载驱动程序
// 连接MySQL数据库时,要写上连接的用户名和密码
conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
createTable(conn);// 创建表格
setInformation(conn);// 插入信息
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private static void setInformation(Connection conn) throws SQLException {
PreparedStatement pstmt = null;// 数据库操作
Main e3 = new Main();
while (true) {
String text = e3.new InputData().getString("请输入文本信息:");
File f = e3.new InputData().getPhoneDir("请输入图片的路径:", "输入的路径不正确!");
String sql = "insert into info(note,phone) values (?,?)";
pstmt = conn.prepareStatement(sql);// 实例化PreparedStatement
InputStream input = null;
try {
byte[] b = text.getBytes();// 将字符串转换为字节数组
input = new ByteArrayInputStream(b);// 将String转换为输入流
pstmt.setAsciiStream(1, input, b.length);
input = new FileInputStream(f);
pstmt.setBinaryStream(2, input, f.length());
pstmt.executeUpdate();
pstmt.close();
String temp = e3.new InputData().getString("是否继续添加?N取消:");
if ("N".equals(temp) || "n".equals(temp)) {
break;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
private static void createTable(Connection conn) throws SQLException {// 创建数据表
Statement stmt = null;// 数据库操作
stmt = conn.createStatement();
String sql = "create table if not exists info (id int auto_increment primary key,note longtext,phone longblob)";
stmt.execute(sql);
}
}
可以看出多了一个info数据表:
查看数据表:
4、建立一张雇员表(雇员编号、姓名、工作、雇佣日期、基本工资、部门名称),在命令窗口下将表中的全部数据列出。
//源代码链接:https://blog.youkuaiyun.com/qq_43776450/article/details/98469367
//源代码链接:https://blog.youkuaiyun.com/qq_43776450/article/details/98469367
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class Main {
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/sqldatabase";
// MySQL数据库的连接用户名
public static final String DBUSER = "root";
// MySQL数据库的连接密码
public static final String DBPASS = "mysql1234";
public static void main(String[] args) {
Connection conn = null;// 数据库连接
try {
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
createTable(conn);// 创建雇员表
insertInfo(conn);// 插入数据
query(conn);// 查询信息
} catch (ClassNotFoundException | SQLException | ParseException e) {
e.printStackTrace();
}
}
private static void query(Connection conn) throws SQLException {
PreparedStatement pstmt = null;// 数据库操作
ResultSet rs = null;// 保存查询结果
String sql = "select eid,name,work,hiredate,basicwage,dept "
+ "from employe";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();// 实例化ResultSet对象
System.out.println("查询结果如下:");
System.out.println("雇员编号\t姓名\t工作\t雇佣日期\t\t基本工资\t\t部门名称");
while (rs.next()) {
int eid = rs.getInt(1);
String name = rs.getString(2);
String work = rs.getString(3);
java.util.Date hiredate = rs.getDate(4);
Float basicwage = rs.getFloat(5);
String dept = rs.getString(6);
System.out.print(eid + "\t");
System.out.print(name + "\t");
System.out.print(work + "\t");
System.out.print(hiredate + "\t");
System.out.print(basicwage + "\t\t");
System.out.println(dept);
}
}
private static void insertInfo(Connection conn) throws SQLException, ParseException {// 向表中插入数据
PreparedStatement pstmt = null;// 数据库操作
java.util.Date temp = null;
String sql = "insert into employe(name,work,hiredate,basicwage,dept) values(?,?,?,?,?)";
pstmt = conn.prepareStatement(sql);// 实例化PreparedStatement对象
String[] employe1 = {"张三", "程序员", "2001-04-15", "8000", "搜索部"};
String[] employe2 = {"李四", "程序员", "2004-06-01", "6000", "游戏测试部"};
String[] employe3 = {"王五", "项目经理", "2011-02-04", "12000", "搜索部"};
String[] employe4 = {"赵六", "董事长", "1999-08-30", "20000", "董事会"};
String[] employe5 = {"钱七", "项目助理", "2016-08-07", "7000", "财务部"};
String[] employe6 = {"孙八", "销售", "2017-05-21", "6000", "销售部"};
String[][] allEmploye = {employe1, employe2, employe3, employe4, employe5, employe6};
for (int i = 0; i < allEmploye.length; i++) {
for (int j = 0; j < allEmploye[i].length; j++) {
if (j == 2) {
// 通过SimpleDateFormat类将字符串转换为java.util.Date类型
temp = new SimpleDateFormat("yyyy-MM-dd").parse(allEmploye[i][j]);
// 通过java.util.Date取出具体的日期数,并将其变为java.sql.Date类型
java.sql.Date date = new java.sql.Date(temp.getTime());
pstmt.setDate(j + 1, date);
} else if (j == 3) {
Float number = Float.valueOf(allEmploye[i][j]);
pstmt.setFloat(j + 1, number);
} else {
pstmt.setString(j + 1, allEmploye[i][j]);
}
}
pstmt.addBatch();
}
int num[] = pstmt.executeBatch();
System.out.println("更新了" + num.length + "条数据。");
pstmt.close();
}
private static void createTable(Connection conn) throws SQLException {
PreparedStatement pstmt = null;
String sql = "create table if not exists employe(eid int auto_increment primary key,name varchar(20) not null,"
+ "work varchar(30) not null,hiredate date not null,basicwage float not null,dept varchar(40))";
pstmt = conn.prepareStatement(sql);
pstmt.execute();
pstmt.close();
}
}
命令窗口下查看表中数据: