【JAVA与C#比较】SQL语句操作数据库
2018-03-08 22:38
686 查看
1.java中用sql语句操作数据库有三种方式:到数据库协议连接数据库,到本地API方式连接数据库,JDBC-ODBC方式连接数据库,这三种不同方式都有不同的URL字符串,驱动字符串前两者相同,是"oracle.jdbc.driver.OracleDriver",而后一种是"sun.jdbc.odbc.JdbcOdbcDriver",它们都要采用JDBC。C#中通常用ADO.NET,里面含OleDbconnection和SqlConnection。
2.java在进行数据库连接前要加载数据库驱动,C#中不需要代码写这步,会自动实现。
3.java中Statement对象的execute方法结合其getResultSet和getUpdateCount方法,几乎可以执行任何SQL语句。C#中ExecuteScalar可用于返回一个结果,如表的记录个数、当前时间/日期,返回类型object,可以将结果强制转换为合适类型。
4.java在执行方面executeUpdate用于插入、更新、删除或创建表,返回受影响的记录个数,而C#用ExecuteNonQuery实现。java中executeQuery用于读取,返回SqlDataReader类型。而C#中是ExecuteReader用于读取,返回ResultSet类型。这些不同在后面的实例代码中也可以看到。
5.java中sql命令是从数据库连接对象创建,C#是以数据库连接对象作为参数构造。参照上面代码有
6.针对参数和值比较多的情况,java中用占位符?和PrepareStatement来处理,使用PreparedStatement比使用Statement效率高,还可防止SQL注入。C#用参数@申明占位符和Parameters处理。以上面的插入语句为例:
7.在查询方面,执行方法和返回结果集用的对象不同,参照上面代码有
8.java中调用存储过程使用CallableStatement,调用的sql语句格式为{call 过程名(?,?,...)}。而C#中依然是SqlCommand,是指需要设置命令类型为存储过程。参照上面代码
9.java中RowSet把底层数据读取到内存中进行离线操作,操作完成后再同步到底层数据源,而在C#中是DataSet。
10.java中事务用连接对象的setAutoCommit方法进行处理,而C#中用TransactionScope处理。java提交事务用commit方法,C#用Complete方法。不过它们在出现未处理的SQLException异常时,系统将自动回滚事务。
2.java在进行数据库连接前要加载数据库驱动,C#中不需要代码写这步,会自动实现。
//sqlserver数据库就是"com.microsoft.sqlserver.jdbc.SQLServerDriver"字符串 //oracle数据库就是"oracle.jdbc.driver.OracleDriver"字符串 Class.forName("com.mysql.jdbc.Driver"); //sqlserver数据库就是"jdbc:sqlserver://127.0.0.1:1433;DatabaseName=db_database17"字符串 //oracle数据库就是"jdbc:oracle:thin:@localhost;1521:db_database17"字符串 String url = "jdbc:mysql://localhost:3306/db_database17"; String user = "root"; //sqlserver数据库默认用户名为sa String password = "123456"; Connection conn = DriverManager.getConnection(url,user,password);
//或者"Data Source=.\\SQLExpress;database=Northwind;Trusted_Connection=true;" string source = "server=(local);"+"integrated security=SSPI;"+"database=Northwind"; using(SqlConnection conn = new SqlConnection(source)) { conn.Open(); }另外,C#为了让开发人员不用再去记连接字符串中的参数名称,可以用SqlConnectionStringBuilder对象的相关属性进行赋值,java里面没有此类对象。形如:
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); builder.DataSource = ".\\SQLExpress";
3.java中Statement对象的execute方法结合其getResultSet和getUpdateCount方法,几乎可以执行任何SQL语句。C#中ExecuteScalar可用于返回一个结果,如表的记录个数、当前时间/日期,返回类型object,可以将结果强制转换为合适类型。
4.java在执行方面executeUpdate用于插入、更新、删除或创建表,返回受影响的记录个数,而C#用ExecuteNonQuery实现。java中executeQuery用于读取,返回SqlDataReader类型。而C#中是ExecuteReader用于读取,返回ResultSet类型。这些不同在后面的实例代码中也可以看到。
5.java中sql命令是从数据库连接对象创建,C#是以数据库连接对象作为参数构造。参照上面代码有
Statement stmt = conn.creatStatement(); String sql = "insert into tb_user(name,password,sex,age)"values('张三','111','男','22')"; stmt.executeUpdate();
string sql = "insert into tb_user(name,password,sex,age)"values('张三','111','男','22')"; SqlCommand cmd = new SqlCommand(select,conn); int ret = cmd.ExecuteNonQuery();
6.针对参数和值比较多的情况,java中用占位符?和PrepareStatement来处理,使用PreparedStatement比使用Statement效率高,还可防止SQL注入。C#用参数@申明占位符和Parameters处理。以上面的插入语句为例:
String sql = "insert into tb_user(name,password,sex,age)values(?,?,'男',?)"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1,"张三"); ps.setString(2,"111"); ps.setInt(4,22); ps.executeUpdate();
SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = "insert into tb_user(name,password,sex,age)"values(@name,@password,@sex,@age)"; cmd.Parameters.Add("@name",SqlDbType.VarChar,10).Value = "张三"; cmd.Parameters.Add("@password",SqlDbType.VarChar,15).Value = "111"; cmd.Parameters.Add("@sex",SqlDbType.VarChar,6).Value = "男"; cmd.Parameters.Add("@age",SqlDbType.Int).Value = 22; int count = cmd.ExecuteNonQuery();
7.在查询方面,执行方法和返回结果集用的对象不同,参照上面代码有
String name,pwd; ResultSet rs = stmt.executeQuery(); while(rs.next()){ name = rs.getString(1); //以列号查询,列号从1开始 pwd = rs.getString("password"); //以列名查询 }
string name,pwd; SqlDataReader read = cmd.ExecuteReader(); while(read.Read()) { name = read[0]; //以索引查询,索引从0开始 pwd = read["password"]; //以列名查询 }
8.java中调用存储过程使用CallableStatement,调用的sql语句格式为{call 过程名(?,?,...)}。而C#中依然是SqlCommand,是指需要设置命令类型为存储过程。参照上面代码
try( Connection conn = DriverManager.getConnection(url,user,password); CallableStatement cstmt = conn.prepareCall("{call add_people(?,?,?)}")){ cstmt.setInt(1,4); cstmt.setInt(2,22); //注册CallableStatement的第三个参数是int类型 cstmt.registerOutParameter(3,Types.INTERGER); cstmt.execute(); int result = cstmt.getInt(3); }
SqlCommand cmd = new SqlCommand("add_people",conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@age",4); cmd.Parameters.Add(new SqlParameter("@name",SqlDbType.NChar,10,"name")); cmd.Parameters.Add(new SqlParameter("@score",SqlDbType.Int,0,ParameterDirection.Output,false,0,0,"score",DataRowVersion.Default,null)); cmd.UpdatedRowSource = UpdatedRowSource.OutputParameters;//指定数据通过输出参数从存储过程中返回。 cmd.Parameters["@name"].Value = "张三"; cmd.ExecuteNonQuery(); int result = (int)cmd.Parameters["@score"].Value;//读取执行后的输出参数
9.java中RowSet把底层数据读取到内存中进行离线操作,操作完成后再同步到底层数据源,而在C#中是DataSet。
10.java中事务用连接对象的setAutoCommit方法进行处理,而C#中用TransactionScope处理。java提交事务用commit方法,C#用Complete方法。不过它们在出现未处理的SQLException异常时,系统将自动回滚事务。
boolean falg = conn.getAutoCommit(); conn.setAutoCommit(false); //关闭自动提交,开启事务 ...//执行多个sql语句 conn.commit(); //异常的话可以通过conn.rollback()方法回滚事务 conn.setAutoCommit(falg);
using(TransactionScope scope = new TransactionScope()) { ...//执行多个sql语句 scope.Complete(); }
相关文章推荐
- C#连接数据库最基本操作之sql语句 DML
- Java学习篇之SQL语句(操作数据库和数据表)
- c# 操作mssql数据库 含有带参数sql语句运行
- JAVA中数据库操作中sql语句遇到的问题
- 【JAVA与C#比较】ORM操作数据库
- java代码,使用sql语句操作mongo数据库
- java中连接数据库操作的语句,获得执行sql语句对数据库进行操作
- C#连接数据库最基本操作之sql语句 DML
- Java动态生成SQL语句通过JDBC达成数据库操作
- c# 数据库访问静态类 支持多条SQL语句事务操作
- 在C#中利用SQL语句与数据库进行操作
- C#(.net)中的一次连接数据库执行多条sql语句(两种方法)
- oracle 下 创建数据库和用户界面操作 和sql 语句 下的创建方法
- oracle中的sql语句,对数据库的完全操作
- C#中使用SQL的BULK语句,进行大数据量操作
- 利用Java+sqlserver 实现对数据库的操作
- C#(.net)中的一次连接数据库执行多条sql语句
- asp.net数据库操作技巧例子,改变sql语句
- sql语句的用法数据库操作
- 操作 SQL Server Mobile 2005 数据库的常用 C# 代码