万能DBHelper类

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;
using System.Collections;


namespace CBAHotelDAL
{
    public static class DBHelper
    {
        /// <summary>
        /// 获取配置文件中的连接字符串
        /// </summary>
        ///
        public static string ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        /// <summary>
        /// 打开连接(如果之前未打开),并且创建一个可以立即执行的 SqlCommand 对象。
        /// 该方法主要在 DBHelper 内部使用
        /// </summary>
        public static SqlCommand CreateCommand(string commandText, SqlConnection con)
        {
            if (con.State != ConnectionState.Open)
                con.Open();
            return new SqlCommand(commandText, con);
        }

        /// <summary>
        /// 执行查询(SELECT)语句。
        /// </summary>
        /// <param name="commandText">SELECT 语句</param>
        /// <param name="con">连接对象。不需要事先打开(但要先实例化(new)),也不需要显式关闭。</param>
        /// <returns>包含查询结果的 SqlDataReader 对象</returns>
        public static SqlDataReader ExecuteReader(string commandText, SqlConnection con)
        {
            // 订阅事件,用于调试连接状态
            con.StateChange += new StateChangeEventHandler(con_StateChange);
            SqlCommand cmd = CreateCommand(commandText, con);
            SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            return dr;
        }

        /// <summary>
        /// 执行查询(SELECT)存储过程。
        /// </summary>
        /// <param name="procedureName">存储过程</param>
        /// <param name="con">连接对象。不需要事先打开(但要先实例化(new)),也不需要显式关闭。</param>
        /// <param name="parameters">存储过程的参数</param>
        /// <returns>包含查询结果的 SqlDataReader 对象</returns>
        public static SqlDataReader ExecuteReader(string procedureName, SqlConnection con, SqlParameter[] parameters)
        {
            // 订阅事件,用于调试连接状态
            con.StateChange += new StateChangeEventHandler(con_StateChange);
            SqlCommand cmd = CreateCommand(procedureName, con);
            cmd.CommandType = CommandType.StoredProcedure;
            if (parameters != null)
                for (int i = 0; i < parameters.Length; i++)
                    cmd.Parameters.Add(parameters[i]);
            SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            return dr;
        }

        /// <summary>
        /// 执行增(INSERT)删(DELETE)改(UPDATE)语句。
        /// 这个方法自己会创建连接、打开连接并且自动关闭连接。
        /// </summary>
        /// <param name="commandText">SQL 语句</param>
        public static void ExecuteNonQuery(string commandText)
        {
            using (SqlConnection con = new SqlConnection(ConnectionString))
            {
                // 订阅事件,用于调试连接状态
                con.StateChange += new StateChangeEventHandler(con_StateChange);
                SqlCommand cmd = CreateCommand(commandText, con);
                cmd.ExecuteNonQuery();
            }
        }
        /// <summary>
        /// 查询返回单个值
        /// </summary>
        /// <param name="commandText"></param>
        /// <returns></returns>
        public static object ExecuteScalar(string commandText)
        {
            using (SqlConnection con = new SqlConnection(ConnectionString))
            {
             con.StateChange+=new StateChangeEventHandler(con_StateChange);
             SqlCommand cmd = CreateCommand(commandText, con);
             return cmd.ExecuteScalar();
            }

        }

        /// <summary>
        /// 执行增(INSERT)删(DELETE)改(UPDATE)存储过程。
        /// 这个方法自己会创建连接、打开连接并且自动关闭连接。
        /// </summary>
        /// <param name="procedureName">存储过程名</param>
        /// <param name="parameters">存储过程的参数</param>
        public static void ExecuteNonQuery(string procedureName, SqlParameter[] parameters)
        {
            using (SqlConnection con = new SqlConnection(ConnectionString))
            {
                // 订阅事件,用于调试连接状态
                con.StateChange += new StateChangeEventHandler(con_StateChange);
                SqlCommand cmd = CreateCommand(procedureName, con);
                cmd.CommandType = CommandType.StoredProcedure;
                if (parameters != null)
                    for (int i = 0; i < parameters.Length; i++)
                        cmd.Parameters.Add(parameters[i]);
                cmd.ExecuteNonQuery();
            }
        }

        public static void ExecuteTransaction(ArrayList sqls, SqlTransaction sqlT)
        {
            using (SqlConnection con = new SqlConnection(DBHelper.ConnectionString))
            {
                con.Open();
                sqlT = con.BeginTransaction(IsolationLevel.ReadCommitted);
                SqlCommand cmd = con.CreateCommand();
                cmd.Transaction = sqlT;
                try
                {
                    //循环事务中语句
                    foreach (string sVal in sqls)
                    {
                        cmd.CommandText = sVal;
                        cmd.ExecuteNonQuery();
                    }
                    //完成后确认事务
                    sqlT.Commit();
                }
                catch (Exception ex)
                {
                    //出错后回滚事务
                    sqlT.Rollback();
                    throw ex;
                }
                finally
                {
                    con.Close();
                }
            }         
        }
        /// <summary>
        /// 这个方法用于调试连接状态。
        /// </summary>
        static void con_StateChange(object sender, StateChangeEventArgs e)
        {
            SqlConnection conSender = sender as SqlConnection;

            System.Diagnostics.Debug.WriteLine("连接状态改变:" + e.OriginalState.ToString() + " => " + e.CurrentState.ToString());
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DBHelper通常用于数据库的操作,包括增删改查等。以下是一个简单的DBHelper的示例代码,可以实现基本的增删改查操作。 ```java public class DBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "mydb.db"; private static final int DATABASE_VERSION = 1; public static final String TABLE_NAME = "mytable"; public static final String COL_ID = "id"; public static final String COL_NAME = "name"; public static final String COL_AGE = "age"; public DBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String sql = "CREATE TABLE " + TABLE_NAME + "(" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_NAME + " TEXT, " + COL_AGE + " INTEGER)"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { String sql = "DROP TABLE IF EXISTS " + TABLE_NAME; db.execSQL(sql); onCreate(db); } public void insert(String name, int age) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(COL_NAME, name); values.put(COL_AGE, age); db.insert(TABLE_NAME, null, values); db.close(); } public void delete(int id) { SQLiteDatabase db = this.getWritableDatabase(); String whereClause = COL_ID + " = ?"; String[] whereArgs = {String.valueOf(id)}; db.delete(TABLE_NAME, whereClause, whereArgs); db.close(); } public void update(int id, String name, int age) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(COL_NAME, name); values.put(COL_AGE, age); String whereClause = COL_ID + " = ?"; String[] whereArgs = {String.valueOf(id)}; db.update(TABLE_NAME, values, whereClause, whereArgs); db.close(); } public List<Person> query() { List<Person> list = new ArrayList<>(); SQLiteDatabase db = this.getReadableDatabase(); String[] columns = {COL_ID, COL_NAME, COL_AGE}; Cursor cursor = db.query(TABLE_NAME, columns, null, null, null, null, null); while (cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex(COL_ID)); String name = cursor.getString(cursor.getColumnIndex(COL_NAME)); int age = cursor.getInt(cursor.getColumnIndex(COL_AGE)); Person person = new Person(id, name, age); list.add(person); } cursor.close(); db.close(); return list; } } ``` 其中,Person是一个简单的Java,用于保存查询结果。 ```java public class Person { private int id; private String name; private int age; public Person(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public String getName() { return name; } public int getAge() { return age; } } ``` 使用DBHelper进行增删改查操作的示例代码: ```java DBHelper dbHelper = new DBHelper(context); // 插入数据 dbHelper.insert("张三", 18); // 删除数据 dbHelper.delete(1); // 更新数据 dbHelper.update(2, "李四", 20); // 查询数据 List<Person> list = dbHelper.query(); for (Person person : list) { Log.d("DBHelper", person.getId() + " " + person.getName() + " " + person.getAge()); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值