数据库连接android
activity
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.lenovo.myapplication.SQLActivity" android:orientation="vertical"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="bt_1" android:text="初始化数据库"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="bt_2" android:text="升级数据库"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:id="@+id/et_id" android:hint="id"/> <EditText android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:id="@+id/et_name" android:hint="名称"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:id="@+id/et_sex" android:hint="性别"/> <EditText android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:id="@+id/et_age" android:hint="年龄"/> </LinearLayout> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="bt_3" android:text="新增数据"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="bt_4" android:text="查询数据"/> </LinearLayout>
java
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.example.lenovo.myapplication;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class SQLActivity extends AppCompatActivity {
EditText et_id,et_name,et_sex,et_age;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sql);
et_id=(EditText)findViewById(R.id.et_id);
et_name=(EditText)findViewById(R.id.et_name);
et_sex=(EditText)findViewById(R.id.et_sex);
et_age=(EditText)findViewById(R.id.et_age);
}
//初始化数据库
public void bt_1(View v)
{
//使用工具类得到数据库连接对象
MyDBHelper myDBHelper=new MyDBHelper("test.db",1);
//得到连接
SQLiteDatabase sd= myDBHelper.getWritableDatabase();
Toast.makeText(SQLActivity.this, "数据库连接成功", Toast.LENGTH_SHORT).show();
//关闭连接
sd.close();
}
//升级数据库
public void bt_2(View v)
{
//使用工具类得到数据库连接对象
MyDBHelper myDBHelper=new MyDBHelper("test.db",2);
//得到连接
SQLiteDatabase sd= myDBHelper.getWritableDatabase();
Toast.makeText(SQLActivity.this, "数据库连接成功", Toast.LENGTH_SHORT).show();
//关闭连接
sd.close();
}
//插入新数据
public void bt_3(View v)
{
//1-连接数据库,得到数据库连接对象
//得到连接
SQLiteDatabase sd= new MyDBHelper("test.db",2).getWritableDatabase();
//2-准备数据
ContentValues cv=new ContentValues();
cv.put("name",et_name.getText().toString());
cv.put("sex",et_sex.getText().toString());
cv.put("age", et_age.getText().toString());
//3-调用insret();插入数据
long l=sd.insert("t_user", null, cv);
Toast.makeText(SQLActivity.this, "插入数据的主键="+l, Toast.LENGTH_SHORT).show();
//4-关闭连接。
sd.close();
}
//数据查询
public void bt_4(View v)
{
//1-连接数据库,得到数据库连接对象
//得到连接
SQLiteDatabase sd= new MyDBHelper("test.db",2).getWritableDatabase();
//2-全表全字段查询
Cursor c= sd.query("t_user", null, null, null, null, null, null);
//3-遍历结果集.游标.
while (c.moveToNext())
{
//如果移动成功,读取数据
String str="id="+c.getLong(c.getColumnIndex("_id"))+"姓名="+c.getString(1)+"性别="+c.getString(2)+"年龄="+c.getString(3);
Log.e("TAG",str);
}
c.close();
//4-关闭连接。
sd.close();
}
//实现SQLiteOpenHelper内部类
class MyDBHelper extends SQLiteOpenHelper
{
public MyDBHelper(String dbname,int ver)
{
//显示调用父类的构造方法
//必须在第一行
super(SQLActivity.this,dbname,null,ver);
}
//创建初始化数据库
@Override
public void onCreate(SQLiteDatabase db) {
//1-执行创建数据库的语句
String sql="CREATE TABLE t_user ( " +
"_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," +
"name VARCHAR(20) NOT NULL," +
"sex CHAR9(1),age INTEGER)";
db.execSQL(sql);//建表
Log.e("TAG","表创建成功");
//2-执行初始化数据的语句,增加语句insert
ContentValues contentValues=new ContentValues();
contentValues.put("name","张三");
contentValues.put("sex","男");
contentValues.put("age","20");
//3-执行插入,返回一个主键
long l=db.insert("t_user",null,contentValues);
Log.e("TAG","初始化数据="+l);
}
//升级数据库
//触发条件:当版本号增大
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//修改数据
if (newVersion==2)
{
ContentValues contentValues = new ContentValues();
contentValues.put("name","李四");
String sql=" update t_user set name = '李四' where _id =1";
String [] strings ={"1","18"}; //与?一一对应,用数组传进去
//调用db的更新方法
int i =db.update("t_user", contentValues, "_id=? and age>?", strings);
Log.e("TAG","升级数据 数据条数="+i);
}
}
}
}
java
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.example.lenovo.myapplication;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class SQLActivity extends AppCompatActivity {
EditText et_id,et_name,et_sex,et_age;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sql);
et_id=(EditText)findViewById(R.id.et_id);
et_name=(EditText)findViewById(R.id.et_name);
et_sex=(EditText)findViewById(R.id.et_sex);
et_age=(EditText)findViewById(R.id.et_age);
}
//初始化数据库
public void bt_1(View v)
{
//使用工具类得到数据库连接对象
MyDBHelper myDBHelper=new MyDBHelper("test.db",1);
//得到连接
SQLiteDatabase sd= myDBHelper.getWritableDatabase();
Toast.makeText(SQLActivity.this, "数据库连接成功", Toast.LENGTH_SHORT).show();
//关闭连接
sd.close();
}
//升级数据库
public void bt_2(View v)
{
//使用工具类得到数据库连接对象
MyDBHelper myDBHelper=new MyDBHelper("test.db",2);
//得到连接
SQLiteDatabase sd= myDBHelper.getWritableDatabase();
Toast.makeText(SQLActivity.this, "数据库连接成功", Toast.LENGTH_SHORT).show();
//关闭连接
sd.close();
}
//插入新数据
public void bt_3(View v)
{
//1-连接数据库,得到数据库连接对象
//得到连接
SQLiteDatabase sd= new MyDBHelper("test.db",2).getWritableDatabase();
//2-准备数据
ContentValues cv=new ContentValues();
cv.put("name",et_name.getText().toString());
cv.put("sex",et_sex.getText().toString());
cv.put("age", et_age.getText().toString());
//3-调用insret();插入数据
long l=sd.insert("t_user", null, cv);
Toast.makeText(SQLActivity.this, "插入数据的主键="+l, Toast.LENGTH_SHORT).show();
//4-关闭连接。
sd.close();
}
//数据查询
public void bt_4(View v)
{
//1-连接数据库,得到数据库连接对象
//得到连接
SQLiteDatabase sd= new MyDBHelper("test.db",2).getWritableDatabase();
//2-全表全字段查询
Cursor c= sd.query("t_user", null, null, null, null, null, null);
//3-遍历结果集.游标.
while (c.moveToNext())
{
//如果移动成功,读取数据
String str="id="+c.getLong(c.getColumnIndex("_id"))+"姓名="+c.getString(1)+"性别="+c.getString(2)+"年龄="+c.getString(3);
Log.e("TAG",str);
}
//c.getCount();//查询到的数据条数
Toast.makeText(SQLActivity.this, "结果集的记录条数="+c.getCount(), Toast.LENGTH_SHORT).show();
c.close();
//4-关闭连接。
sd.close();
}
//带条件数据查询
public void bt_5(View v)
{
//1-连接数据库,得到数据库连接对象
//得到连接
SQLiteDatabase sd= new MyDBHelper("test.db",2).getWritableDatabase();
String strw="1=1";
//得到条件
//select * from t_user where 1=1 and _id=1 and name like= '%张%'
if (et_id.getText().length()>0)
{
strw+=" and _id="+et_id.getText().toString();
}
if (et_name.getText().length()>0)
{
strw+="and name like '%"+et_name.getText().toString()+"%'";
}
if (et_sex.getText().length()>0)
{
strw+="and sex '"+et_sex.getText().toString()+"'";
}
if (et_age.getText().length()>0)
{
strw+="and age "+et_sex.getText().toString()+"";
}
//2-全表全字段查询
Cursor c= sd.query("t_user", null, strw, null, null, null, null);
//3-遍历结果集.游标.
while (c.moveToNext())
{
//如果移动成功,读取数据
String str="id="+c.getLong(c.getColumnIndex("_id"))+"姓名="+c.getString(1)+"性别="+c.getString(2)+"年龄="+c.getString(3);
Log.e("TAG",str);
}
//c.getCount();//查询到的数据条数
Toast.makeText(SQLActivity.this, "结果集的记录条数="+c.getCount(), Toast.LENGTH_SHORT).show();
c.close();
//4-关闭连接。
sd.close();
}
//修改数据
public void bt_6(View v)
{
//1-连接数据库,得到数据库连接对象
//得到连接
SQLiteDatabase sd= new MyDBHelper("test.db",2).getWritableDatabase();
//2-修改
ContentValues cv=new ContentValues();
cv.put("name",et_name.getText().toString());
cv.put("sex",et_sex.getText().toString());
cv.put("age", et_age.getText().toString());
int i=sd.update("t_user", cv, "_id=?", new String[]{et_id.getText().toString()});
Toast.makeText(SQLActivity.this, "结果集的记录条数="+i, Toast.LENGTH_SHORT).show();
//4-关闭
sd.close();
}
//删除数据
public void bt_7(View v)
{
//1-连接数据库,得到数据库连接对象
//得到连接
SQLiteDatabase sd = new MyDBHelper("test.db", 2).getWritableDatabase();
//2-删除
int i= sd.delete("t_user", "_id=?", new String[]{et_id.getText().toString()});
Toast.makeText(SQLActivity.this, "删除数据条数="+i, Toast.LENGTH_SHORT).show();
//关闭
sd.close();
}
//数据库事务
public void bt_8(View v)
{
//1-连接数据库,得到数据库连接对象
// 得到连接
SQLiteDatabase sd = new MyDBHelper("test.db", 2).getWritableDatabase();
try {
//启动事务
sd.beginTransaction();
//2-修改
// 修改1
ContentValues cv = new ContentValues();
cv.put("age", "42");
int i = sd.update("t_user", cv, "_id=1", null);
//修改2
//抛出异常
//确保一致性
// if (i > 0) {
// throw new RuntimeException("模拟事务异常");
// }
ContentValues cv2 = new ContentValues();
cv.put("age", "52");
int k = sd.update("t_user", cv2, "_id=2", null);
//设置事务是成功完成的
sd.setTransactionSuccessful();
Toast.makeText(SQLActivity.this, "结果集的记录条数=" + (i + k), Toast.LENGTH_SHORT).show();
}
catch (Exception e)
{
e.printStackTrace();
Toast.makeText(SQLActivity.this, "修改出错", Toast.LENGTH_SHORT).show();
}
finally {
//一定会执行的代码
//结束事务
//1-没有异常,提交事务
//2-发生异常,回滚事务
sd.endTransaction();
//4-关闭
sd.close();
}
}
//实现SQLiteOpenHelper内部类
class MyDBHelper extends SQLiteOpenHelper
{
public MyDBHelper(String dbname,int ver)
{
//显示调用父类的构造方法
//必须在第一行
super(SQLActivity.this,dbname,null,ver);
}
//创建初始化数据库
@Override
public void onCreate(SQLiteDatabase db) {
//1-执行创建数据库的语句
String sql="CREATE TABLE t_user ( " +
"_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," +
"name VARCHAR(20) NOT NULL," +
"sex CHAR9(1),age INTEGER)";
db.execSQL(sql);//建表
Log.e("TAG","表创建成功");
//2-执行初始化数据的语句,增加语句insert
ContentValues contentValues=new ContentValues();
contentValues.put("name","张三");
contentValues.put("sex","男");
contentValues.put("age","20");
//3-执行插入,返回一个主键
long l=db.insert("t_user",null,contentValues);
Log.e("TAG","初始化数据="+l);
}
//升级数据库
//触发条件:当版本号增大
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//修改数据
if (newVersion==2)
{
ContentValues contentValues = new ContentValues();
contentValues.put("name","李四");
String sql=" update t_user set name = '李四' where _id =1";
String [] strings ={"1","18"}; //与?一一对应,用数组传进去
//调用db的更新方法
int i =db.update("t_user", contentValues, "_id=? and age>?", strings);
Log.e("TAG","升级数据 数据条数="+i);
}
}
}
}