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”,就可以查看结果