public class LinktoSqlSever {//PrepareStatement可以使用?作为占位符,在得到结果集之前设置相应参数,为空也要使用相应的set方法,可复用
public static final String drivername="com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String connurl="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=project";
private Connection connserver;
public void linkDatabase(){
try {
Class.forName(drivername);
DriverManager.setLogStream(System.out);
connserver=DriverManager.getConnection(connurl,"sa","sasa");
System.out.println("successful");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public Connection getConnserver() {
return connserver;
}
public void displayTabledata(ResultSet resultSet){
try {//ResultSetMetaData用于获取有关于字段的相关信息
ResultSetMetaData metaData=resultSet.getMetaData();
int colcount=metaData.getColumnCount();
for(int i=1;i<=colcount;i++){
System.out.print(metaData.getColumnLabel(i)+" ");
}
System.out.println();
while(resultSet.next()){
for(int i=1;i<=colcount;i++){
System.out.print(resultSet.getString(i).trim()+" ");
}
System.out.println();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//executeQuery:执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
//executeUpdate:用于执行更新、删除等更新语句以及SQL DDL等建表语句
/*execute:用于执行不确定是更新还是查找的语句,将会返回多个结果集或者更新计数
* 需要利用getUpdateCount、getMoreResults来进行结果集的顺序读出、确定
* getUpdateCount返回-1表示是结果集,否则是表示影响的行数
* getMoreResults进行结果集的移动,返回false表示是更新计数或者空结果集
* 还是需要getResultSet来获取结果集
*/
//知道SQL转义,利用{keyword params}形式对前面的语句进行解释
public void insertdata(String ... sqlinset){
Statement statement=null;
ResultSet resultSet=null;
try{
statement=connserver.createStatement();
int i=0;
for(i=0;i<sqlinset.length-1;i++){
statement.executeUpdate(sqlinset[i]);//执行添加语句
}
resultSet=statement.executeQuery(sqlinset[i]);
displayTabledata(resultSet);//查看结果,观察是否添加成功
}
catch(SQLException sqlException){
System.out.println("failed");
}
finally{
try {
resultSet.close();
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//查询方法
public void querydata(String querysql){
Statement statement=null;
ResultSet resultSet=null;
try{
statement=connserver.createStatement();
resultSet=statement.executeQuery(querysql);
displayTabledata(resultSet);
}
catch(SQLException ex){
}
finally {
try {
if(resultSet!=null)
resultSet.close();
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//修改和删除使用的方法
public void changedata(String ...delsql){
Statement statement=null;
ResultSet resultSet=null;
try{
statement=connserver.createStatement();
int i=0;
for(i=0;i<delsql.length-1;i++){
System.out.println(statement.executeUpdate(delsql[i])+"行受影响");
}
resultSet=statement.executeQuery(delsql[i]);
displayTabledata(resultSet);
}
catch(SQLException ex){
}
finally {
try {
resultSet.close();
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void batchProcessByPreStatement(int []values){
PreparedStatement pst=null;
try {
pst=connserver.prepareStatement("inset into J(JNO) values(?)");
for(int i=0;i<values.length;i++){
pst.setInt(1, values[i]);//设置?占位符的参数,当占位符为null时仍需使用相应的set方法指定类型,当传递较大数据时应使用流
pst.addBatch();//将SQL命令加入命令列表
}
pst.executeBatch();//执行批量更新
} catch (SQLException e) {
e.printStackTrace();
}
}
public void batchProcessByStatement(String []sqlstr){
Statement statement = null;
try {
statement=connserver.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
for(int i=0;i<sqlstr.length;i++){
try {
statement.addBatch(sqlstr[i]);//添加批量处理的SQL语句
} catch (SQLException e) {
e.printStackTrace();
}
}
try {
statement.executeBatch();//执行批量的SQL语句
} catch (SQLException e) {
e.printStackTrace();
}
}
//DatabaseMetaData用于获取数据表的信息
public void getDatabaseInfo(){
try {
DatabaseMetaData metaData=connserver.getMetaData();//最后一个参数为表类型
ResultSet dbinfo=metaData.getTables(null, null, null, new String[]{"TABLE"});
while(dbinfo.next()){
System.out.println(dbinfo.getString("TABLE_NAME"));//获取数据库下各个表的名称
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void disconnect(){
if(connserver!=null){
try {
connserver.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
11-15
11-15