Java连接MySQL8.0样例代码


代码功能: 针对MySQL8.0,可以动态传入数据库连接信息(IP、端口、数据库、用户、密码)、以及需要执行查询SQL。

注意:由于代码中打印表中的数据,所以最后在Main方法传入的参数是需要是查询的SQL。

 



import java.sql.*;

public class RdsConcurrencyTest {

public static String host = null;
public static String port = null;
public static String url = null;
public static String name = "com.mysql.cj.jdbc.Driver";
public static String user = null;
public static String password = null;
public static String database = null;
public static String sql = null;

private static PreparedStatement ps = null;
private static Connection conn = null;
private static ResultSet rs = null;

// 处理Main方法传入的参数
private static boolean parseArgs(String[] args) {
for(int i = 0; i < args.length;) {
if (args[i].equals("--host")) {
host = args[i+1];
i += 2;
} else if (args[i].equals("--port")) {
port = args[i+1];
i += 2;
} else if (args[i].equals("--database")) {
database = args[i+1];
i += 2;
} else if (args[i].equals("--user")) {
user = args[i+1];
i += 2;
} else if (args[i].equals("--password")) {
password = args[i+1];
i += 2;
} else if (args[i].equals("--sql")) {
sql = args[i+1];
i += 2;
} else {
return false;
}
}
return true;
}

//获取Connection连接对象的方法,使用static方便之后在其他类中调用
public static Connection getConn() {
try {
Class.forName(name);
conn = DriverManager.getConnection(url, user, password);//获取连接
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
}
return conn;
}

//关闭资源的方法
public static void close(ResultSet rs, PreparedStatement ps, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

}

//如果没有传参或者传参错误,打印传参的格式
private static void printUsage() {
System.err.println("Usage: RdsConcurrencyTest [options]");
System.err.println("\t--host\thost ip");
System.err.println("\t--port\tport");
System.err.println("\t--database\tdatabase");
System.err.println("\t--user\tuser");
System.err.println("\t--password\tpassword");
System.err.println("\t--sql\tsql");
}

// Main方法入口
public static void main(String[] args) throws SQLException {
if (!parseArgs(args)) {
printUsage();
System.exit(1);
}
if (host == null || port == null || database == null ||
user == null || password == null || sql == null) {
printUsage();
System.exit(1);
}else{
url = "jdbc:mysql://" + host + ":" + port + "/" + database + "?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT";
//System.out.println("url: " + url);
}

RdsConcurrencyTest rds = new RdsConcurrencyTest();
Connection myconn = rds.getConn();
//String sql = "select * from my_test";

try {
ps = myconn.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
String uid = rs.getString(1);
String ufname = rs.getString(2);
System.out.println(uid + "\t" + ufname + "\t");
}

} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
rds.close(rs,ps,conn);
}

}

}



执行时需要传入参数:

例如:

--host localhost --port 3306 --database test --user root --password  Root@1234 --sql  "select * from my_test"

如果不传参数或者少传参数,会报如下错误:

IntelliJ IDEA 给Main方法入口传参:

在编辑器中右键"more Run/Debug"——> "Modify Run Configuration" 

在下图中位置,添加传入的参数,然后点击“Apply”,然后点击“OK”。

--host localhost --port 3306 --database test --user root --password  Root@1234 --sql  "select * from my_test" 

 这时再执行 “Run”,就可以查看结果