获取自增长字段的新增值
public static void main(String[] args) {
try (Connection conn = DriverManager.getConnection("jdbc:mysql:///mydata?characterEncoding=utf8&useSSL=true", "root", "root");
PreparedStatement stmt = conn.prepareStatement("insert into testauto values(null,?)", Statement.RETURN_GENERATED_KEYS);
) {
Class.forName("com.mysql.jdbc.Driver");
for (int i = 1; i < 11; i++) {
stmt.setInt(1, i);
stmt.execute();
}
ResultSet rs = stmt.getGeneratedKeys();
if (rs.next()) {
int newNum = rs.getInt(1);
System.out.println(newNum);
// System.out.println(rs.getInt(2));java.sql.SQLException: Column Index out of range, 2 > 1.
}
} catch (Exception e) { e.printStackTrace();}
}
有几点要注意的
1.当mysql的版本高于mysql-connector时需要在连接行添加 :
?useSSl=true
2.在5.1.7版本之后的mysql-connector中preparedStatement要获取自增长字段的值必须写成如下格式声明返回keys
PreparedStatement stmt = conn.prepareStatement(
"insert into testauto values(null,?)", Statement.RETURN_GENERATED_KEYS);
获取元数据
import java.sql.*;
public class GetDatabaseMetaData {
public static void main(String[] args) throws Exception {
try (Connection conn = DriverManager.getConnection("jdbc:mysql:///mydata?useSSL=true&user=root&password=root");) {
Class.forName("com.mysql.jdbc.Driver");
DatabaseMetaData dbmd = conn.getMetaData();
// 获取数据库服务器产品名称
System.out.println("数据库产品名称:\t" + dbmd.getDatabaseProductName());
// 获取数据库服务器产品版本号
System.out.println("数据库产品版本:\t" + dbmd.getDatabaseProductVersion());
// 获取数据库服务器用作类别和表名之间的分隔符 如test.user
System.out.println("数据库和表分隔符:\t" + dbmd.getCatalogSeparator());
// 获取驱动版本
System.out.println("驱动版本:\t" + dbmd.getDriverVersion());
System.out.println("可用的数据库列表:");
// 获取数据库名称
ResultSet rs = dbmd.getCatalogs();
while (rs.next()) {
System.out.println("数据库名称:\t" + rs.getString(1));
}
}
}
}