很多知识点,学完用完了就忘记了,忘记了就不是自己的,所以试着写点,让知识形成框架,记录点点滴滴吧
android 的存储方式有5种:
1、SharedPreferences(偏好设置)
轻量级的;保存的是原始的数据类型;常被用作保存程序的配置信息
保存参数:通过Context.getSharedPreferences()得到一个SharedPreferences;
获取一个Editor,对保存的参数进行编辑
最后通过Commit(),进行提交
SharedPreferences settings = getSharedPreferences("info",0);
Editor editor = setting.edit();
editor.putString("name",nameEditText.getText().toString())
.putString("pwd",passwordEditText.getText().toString())
.commot();
1)这四种模式代表的含义为:
Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
2)SharedPreferences 获取数据
SharedPreferences sharedPreferences =getSharedPreferences("mltest", Context.MODE_PRIVATE);
Editor editor = sharedPreferences.edit();//获取编辑器
editor.putString("name", "四种模式");
editor.putInt("age", 4);
editor.commit();//提交修改
看过很多遍,可是依然不是很透彻,在以后的项目中慢慢理解吧。
参考网址:https://www.cnblogs.com/wushanmanong/p/6273027.html
2、SQLite
2.1在BaseDate文件夹新建 数据库DBOpenHelper
/**
* 类名:DBOpenHelper
* 创建人:by
* 创建日期:2017/9/18 15:35
* 描述:
*/
public class DBOpenHelper extends SQLiteOpenHelper {
public DBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
int version) {
super(context, "SqliteTest.db", null, 1);//向系统申请一个SqliteTest.db文件存这个数据库,其中1是数据库版本。
}
@Override
public void onCreate(SQLiteDatabase sqliteDatabase) {
/*示例demo*/
String sql=
"create table if not exists t_user("+
"id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"+
"username VARCHAR(255),"+
"password VARCHAR(255),"+
"isDel INTEGER DEFAULT 0"+
")";//如果初次运行,建立一张t_user表,建表的时候注意,自增是AUTOINCREMENT,而不是mysql的AUTO_INCREMENT
sqliteDatabase.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//这里是更新数据库版本时所触发的方法
Log.i("DEMO","oldVersion=" + oldVersion + ",newVersion" + newVersion);
if (oldVersion != newVersion) {
db.execSQL("ALTER TABLE offlineBanner ADD COLUMN adsequence integer;");
db.execSQL("ALTER TABLE offlineBanner ADD COLUMN isofflinead integer;");
db.execSQL("DROP TABLE IF EXISTS download_url");
}
//执行方法会报异常
onCreate(db);
}
}
2.2数据库存储所需变量
public class User {
private int id;
private String username;
private int isDel;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getIsDel() {
return isDel;
}
public void setIsDel(int isDel) {
this.isDel = isDel;
}
}
2.3写数据库的增删改查
public class UserDao {
private DBOpenHelper dbOpenHelper;// 创建DBOpenHelper对象
private SQLiteDatabase sqliteDatabase;// 创建SQLiteDatabase对象
public UserDao(Context context)// 定义构造函数
{
dbOpenHelper = new DBOpenHelper(context, null, null, 0);// 初始化DBOpenHelper对象
}
// 插入用户数据
public void dbInsert(String username, String password) {
sqliteDatabase = dbOpenHelper.getWritableDatabase();// 以读写方法打开数据库,不仅仅是写,getReadableDatabase()是只读
String sql = "insert into t_user(username,password,isDel) values (?,?,0)";
// 传递过来的username与password分别按顺序替换上面sql语句的两个?,自动转换类型,下同,不再赘述
Object bindArgs[] = new Object[]{username, password};
// 执行这条无返回值的sql语句
sqliteDatabase.execSQL(sql, bindArgs);
}
/*根据时间点查询马歇尔,完成状态 查询 state*/
public ArrayList<User> dbQueryAllDMTimeState(String state, Timestamp starttime, Timestamp endtime) {
ArrayList<User> userArrayList = new ArrayList<User>();
sqliteDatabase = dbOpenHelper.getWritableDatabase();
String sql = null;
String [] newState = new String[0];
if (TextUtils.isEmpty(state) && starttime != null && endtime != null) {
sql = "select * from t_marshall where timestamp>'" + starttime + "' and timestamp<'" + endtime + "' and isDel=0 ";
} else if (!TextUtils.isEmpty(state)) {
sql = "select * from t_marshall where state=? and isDel=0 ";
newState = new String[]{state};
} else if (TextUtils.isEmpty(state) && starttime == null && endtime == null) {
sql = "select * from t_marshall where isDel=0 ";
}
Cursor cursor = sqliteDatabase.rawQuery(sql, newState);
// 游标从头读到尾t
for (cursor.moveToFirst(); !(cursor.isAfterLast()); cursor.moveToNext()) {
if (cursor.getInt(cursor.getColumnIndex("isDel")) != 1) {
User user = new User();
user.setId(cursor.getInt(cursor.getColumnIndex("id")));
user.setSampleNumber(cursor.getString(cursor.getColumnIndex("samplenumber")));
user.setTestNumber(cursor.getString(cursor.getColumnIndex("testnumber")));
user.setMixkind(cursor.getString(cursor.getColumnIndex("mixkind")));
user.setGradatype(cursor.getString(cursor.getColumnIndex("gradatype")));
user.setSpecimentGroup(cursor.getString(cursor.getColumnIndex("specimentgroup")));
user.setProgectName(cursor.getString(cursor.getColumnIndex("projectname")));
user.setAuthorize(cursor.getString(cursor.getColumnIndex("authorize")));
user.setProjectPartuse(cursor.getString(cursor.getColumnIndex("projectpartuse")));
user.setSpec_code(cursor.getString(cursor.getColumnIndex("spec_code")));
user.setDs(cursor.getFloat(cursor.getColumnIndex("ds")));
user.setDf(cursor.getFloat(cursor.getColumnIndex("df")));
user.setMm(cursor.getFloat(cursor.getColumnIndex("mm")));
user.setDiameter(cursor.getFloat(cursor.getColumnIndex("diameter")));
userArrayList.add(user);
}
}
return userArrayList;
}
/*查询s_savenative表*/
public ArrayList<User> dbQuerySaveNative() {
ArrayList<User> userArrayList = new ArrayList<User>();
sqliteDatabase = dbOpenHelper.getWritableDatabase();
String sql = "select * from s_savenative where isDel=0";
//String[] selectionArgs = new String[] { };
Cursor cursor = sqliteDatabase.rawQuery(sql, null);//selectionArgs
// 游标从头读到尾
for (cursor.moveToFirst(); !(cursor.isAfterLast()); cursor.moveToNext()) {
if (cursor.getInt(cursor.getColumnIndex("isDel")) != 1) {
User user = new User();
user.setId(cursor.getInt(cursor.getColumnIndex("id")));
user.setSampleNumber(cursor.getString(cursor.getColumnIndex("samplenumber")));
user.setTestNumber(cursor.getString(cursor.getColumnIndex("testnumber")));
user.setTesttype(cursor.getString(cursor.getColumnIndex("typetest")));
userArrayList.add(user);
}
}
return userArrayList;
}
/*删除s_savenative表中某条样品编号*/
public void dbDeleteSaveNative(String samplenumber, String testnumber, String typetest) {
sqliteDatabase = dbOpenHelper.getWritableDatabase();
String sql = "update s_savenative set isDel=1 where samplenumber=? and testnumber=? and typetest=?";
Object bindArgs[] = new Object[]{samplenumber, testnumber, typetest};
sqliteDatabase.execSQL(sql, bindArgs);
}
}
2.4本地数据库存储
在activity中,private UserDao userDao; 注册组件userDao = new UserDao(this);
2.5直接android 存储数据库,这种方法并不安全,知识为了特定需要。只需要一个在SQLService文件夹下,新建DBUtil类:
package com.csit99.serialport.SQLService;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 类名:DBUtil
* 创建人:by
* 创建日期:2017/9/20 14:25
* 描述:数据库连接类DBUtil
*/
public class DBUtil {
public static Connection getSQLConnection(String ip, String user, String pwd, String db)
{
Connection con = null;
try
{
Class.forName("net.sourceforge.jtds.jdbc.Driver");
con = DriverManager.getConnection("jdbc:jtds:sqlserver://" + "192.xx.xx.xx" + ":端口号/" + "Lab_Client_TestDB_JL20170727" + ";charset=utf8", user, pwd);
} catch (ClassNotFoundException e)
{
e.printStackTrace();
} catch (SQLException e)
{
e.printStackTrace();
}
return con;
}
public static String QuerySQL()
{
String result = "";
try
{
Connection conn = getSQLConnection("192.xx.xx.xx:端口号/Lab_Client_TestDB_JL20170727", "sa", "123", "Lab_Client_TestDB");
String sql = "select * from T0800201Collection";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while (rs.next())
{
String s1 = rs.getString("Test_Code");
String s2 = rs.getString("Spec_Code");
result += s1 + " - " + s2 + "\n";
System.out.println(s1 + " - " + s2);
}
rs.close();
stmt.close();
conn.close();
} catch (SQLException e)
{
e.printStackTrace();
result += "查询数据异常!" + e.getMessage();
}
return result;
}
/*插入针入度数据*/
public static String AddAPSQL(
String Serial_ID
,String Test_Code
,String Spec_Code
,float Test_Temp
,float Penetration1
,float Penetration2
,float Penetration3
,int Valid_Flag,String Proj_Pos,String Asphalt_Type,String Asphalt_Grade ){
String result = "";
try
{
Connection conn = getSQLConnection("192.168.3.169:1433/Lab_Client_TestDB_JL20170727", "sa", "123", "Lab_Client_TestDB");
Statement stmt = conn.createStatement();
String sql = "insert into T0800201Collection(Serial_ID,Test_Code,Spec_Code,Test_Temp" +
",Penetration1,Penetration2,Penetration3,Valid_Flag,Proj_Pos,Asphalt_Type,Asphalt_Grade) values (?,?,?,?,?,?,?,?,?,?,?)";
PreparedStatement ps=conn.prepareStatement(sql);
// ps.setInt(1,12);
ps.setString(1,Serial_ID);
ps.setString(2,Test_Code);
ps.setString(3,Spec_Code);
ps.setFloat(4,Test_Temp);
ps.setFloat(5,Penetration1);
ps.setFloat(6,Penetration2);
ps.setFloat(7,Penetration3);
ps.setFloat(8,Valid_Flag);
ps.setString(9,Proj_Pos);
ps.setString(10,Asphalt_Type);
ps.setString(11,Asphalt_Grade);
ps.executeUpdate();
// ResultSet rs = stmt.executeQuery(sql);
/* while (rs.next())
{
String s1 = rs.getString("Test_Code");
String s2 = rs.getString("Spec_Code");
result += s1 + " - " + s2 + "\n";
System.out.println(s1 + " - " + s2);
}*/
ps.close();
stmt.close();
conn.close();
} catch (SQLException e)
{
e.printStackTrace();
result += "插入数据异常!" + e.getMessage();
}
return result;
}
/*插入软化点数据 这个下次在改版的时候,改成一个字符串的,暂时先这样来写*/
public static String AddSPSQL(String Serial_ID,String Test_Code,String Spec_Code
,float Test_Temp
,float Soften_Point1,float Soften_Point2,float Soften_Point3,float Soften_Point4,float Soften_Point5
,float Soften_Point6,float Soften_Point7,float Soften_Point8,float Soften_Point9,float Soften_Point10
, float Soften_Point11,float Soften_Point12,float Soften_Point13,float Soften_Point14,float Soften_Point15
,float Soften_Point
,String Proj_Pos,String Asphalt_Type ,String Asphalt_Grade){
String result = "";
try
{
Connection conn = getSQLConnection("192.168.3.169:1433/Lab_Client_TestDB_JL20170727", "sa", "123", "Lab_Client_TestDB");
Statement stmt = conn.createStatement();
String sql = "insert into T0800203Collection(Serial_ID,Test_Code,Spec_Code,Test_Temp" +
",Soften_Point1,Soften_Point2,Soften_Point3,Soften_Point4,Soften_Point5" +
",Soften_Point6,Soften_Point7,Soften_Point8,Soften_Point9,Soften_Point10" +
",Soften_Point11,Soften_Point12,Soften_Point13,Soften_Point14,Soften_Point15" +
",Soften_Point,Proj_Pos,Asphalt_Type,Asphalt_Grade) values (?,?,?,?,?,?,?,?,?,?" +
",?,?,?,?,?,?,?,?,?,?,?,?,?)";
PreparedStatement ps=conn.prepareStatement(sql);
// ps.setInt(1,12);
ps.setString(1,Serial_ID);
ps.setString(2,Test_Code);
ps.setString(3,Spec_Code);
ps.setFloat(4,Test_Temp);
ps.setFloat(5,Soften_Point1);
ps.setFloat(6,Soften_Point2);
ps.setFloat(7,Soften_Point3);
ps.setFloat(8,Soften_Point4);
ps.setFloat(9,Soften_Point5);
ps.setFloat(10,Soften_Point6);
ps.setFloat(11,Soften_Point7);
ps.setFloat(12,Soften_Point8);
ps.setFloat(13,Soften_Point9);
ps.setFloat(14,Soften_Point10);
ps.setFloat(15,Soften_Point11);
ps.setFloat(16,Soften_Point12);
ps.setFloat(17,Soften_Point13);
ps.setFloat(18,Soften_Point14);
ps.setFloat(19,Soften_Point15);
ps.setFloat(20,Soften_Point);
ps.setString(21,Proj_Pos);
ps.setString(22,Asphalt_Type);
ps.setString(23,Asphalt_Grade);
ps.executeUpdate();
// ResultSet rs = stmt.executeQuery(sql);
/* while (rs.next())
{
String s1 = rs.getString("Test_Code");
String s2 = rs.getString("Spec_Code");
result += s1 + " - " + s2 + "\n";
System.out.println(s1 + " - " + s2);
}*/
ps.close();
stmt.close();
conn.close();
} catch (SQLException e)
{
e.printStackTrace();
result += "插入数据异常!" + e.getMessage();
}
return result;
}
/* 插入马歇尔数据*/
public static String AddDMSQL(String Serial_ID,String Test_Code,int SpecGroupID,float Stab,float Flow
,String Proj_Pos,String Mixture_Type,String Gradation_Type ){
String result = "";
try{
Connection conn = getSQLConnection("192.168.3.169:1433/Lab_Client_TestDB_JL20170727", "sa", "123", "Lab_Client_TestDB");
if (conn==null){
return result="网络连接失败,保存至本地";
}
Statement stmt = conn.createStatement();
String sql = "insert into T09002Collection(Serial_ID,Test_Code,SpecGroupID,Stab,Flow,Proj_Pos,Mixture_Type,Gradation_Type) values (?,?,?,?,?,?,?,?)";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1,Serial_ID);
ps.setString(2,Test_Code);
ps.setFloat(3,SpecGroupID);
ps.setFloat(4,Stab);
ps.setFloat(5,Flow);
ps.setString(6,Proj_Pos);
ps.setString(7,Mixture_Type);
ps.setString(8,Gradation_Type);
ps.executeUpdate();
ps.close();
stmt.close();
conn.close();
}catch (SQLException e){
e.printStackTrace();
result += "插入数据异常!" + e.getMessage();
}
return result;
}
/*删除 针入度 软化点 马歇尔*/
public static boolean DeleteSQL(String Test_Code,String testtype){
boolean result = false;
try
{
Connection conn = getSQLConnection("192.168.3.169:1433/Lab_Client_TestDB_JL20170727", "sa", "123", "Lab_Client_TestDB_JL20170727");
if (conn==null){
return false;
}
conn.getAutoCommit();
String sql = null;
if (testtype.toString().equals("1")){
sql= "delete from T0800201Collection where Test_Code = '"+Test_Code+"'";
}else if (testtype.toString().equals("2")){
sql= "delete from T0800203Collection where Test_Code = '"+Test_Code+"'";
}else if (testtype.toString().equals("3")){
sql= "delete from T09002Collection where Test_Code = '"+Test_Code+"'";
}
Statement stmt = conn.createStatement();
result=stmt.execute(sql);
stmt.close();
conn.close();
//result=true;
} catch (SQLException e)
{
e.printStackTrace();
result=false;
}
return result;
}
public static void main()
{
QuerySQL();
AddAPSQL("","","",(float)0.0,(float)0.0,(float)0.0,(float)0.0,0,"","","");
//AddAPSQL();
AddSPSQL("","","", (float) 0.0,(float) 0.0,(float) 0.0,(float) 0.0,(float) 0.0,(float) 0.0
,(float) 0.0,(float) 0.0,(float) 0.0,(float) 0.0,(float) 0.0,(float) 0.0,(float) 0.0,(float) 0.0,(float) 0.0
,(float) 0.0,(float) 0.0,"","","");
AddDMSQL("","",0,(float)0.0,(float)0.0,"","","");
DeleteSQL("","");
}
}
2.5.2 开启一个子线程,进行网络操作,等待有返回结果,使用handler通知UI
private void networkTask() {
Runnable run = new Runnable()
{
@Override
public void run()
{
Connection con = DBUtil.getSQLConnection("192.xx.xx.xx:端口/Lab_Client_TestDB_JL20170727", "sa", "123", "Lab_Client_TestDB");
Boolean ret= null;
try {
ret = con.getAutoCommit();
} catch (SQLException e) {
e.printStackTrace();
}
Message msg = new Message();
msg.what=1000;
Bundle data = new Bundle();
data.putString("result", String.valueOf(ret));
msg.setData(data);
mHandler.sendMessage(msg);
}
};
new Thread(run).start();
}
通过Handler传递
Handler mHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
Bundle bundle = msg.getData();
String result = bundle.getString("result");
int i=bundle.getInt("int");
switch (msg.what)
{
case 1000:
if (result.equals("true")){//如果不为空,说明数据连接 !TextUtils.isEmpty(result)
uploadNative();
}else {
Toast.makeText(HomeActivity.this,"暂时无法与数据库进行连接!",Toast.LENGTH_SHORT).show();
return;
}
break;
case 1001:
if (TextUtils.isEmpty(result)){
//添加成功,删除表中数据 不能直接在这删除,暂时先这样写,存至一个list,然后里面是第几个数据
userDao.dbDeleteSaveNative(list.get(i).getSampleNumber(), list.get(i).getTestNumber()
, list.get(i).getTesttype());
}else {
Toast.makeText(HomeActivity.this,result.toString(),Toast.LENGTH_SHORT).show();
}
break;
case 1002:
if (result.equals("false")){
//Toast.makeText(HomeActivity.this,"无法删除后台数据库数据!",Toast.LENGTH_SHORT).show();
}
break;
default:
Toast.makeText(HomeActivity.this,"添加本地数据库",Toast.LENGTH_LONG).show();
break;
}
};
};
通过自定义uploadNative方法,加载数据库方法
private void uploadNative() {
try{
/* list = userDao.dbQuerySaveNative();
if (list.size() > 0) { }*/
//先判断是否有网络
// 开启一个子线程,进行网络操作,等待有返回结果,使用handler通知UI
Runnable run = new Runnable() {
String ret;
public void run() {
/* 先查询没有添加的数据样品编号*/
for (int i = 0; i < list.size(); i++) {
delete(list.get(i).getTestNumber(),list.get(i).getTesttype());
if (list.get(i).getTesttype().equals("1")) {
//查询针入度 这里这个查询语句有问题 ,暂时理解为查询的是全部
listap = userDao.dbQueryAllAP(list.get(i).getSampleNumber(),list.get(i).getTestNumber(),"");
if (listap.size() > 1) {
//沥青针入度再次插入网络服务器
for (int iap = 1; iap < listap.size(); iap++) {
ret = DBUtil.AddAPSQL(
listap.get(iap).getSampleNumber()
, listap.get(iap).getTestNumber()
, listap.get(iap).getSpec_code()
, Float.valueOf(Double.toString(listap.get(iap).getDt()))
, Float.valueOf(Double.toString(listap.get(iap).getDp1()))
, Float.valueOf(Double.toString(listap.get(iap).getDp2()))
, Float.valueOf(Double.toString(listap.get(iap).getDp3()))
, Integer.valueOf(1)
,listap.get(iap).getProjectPartuse()
,listap.get(iap).getTesttype()
,listap.get(iap).getLqMarkGrade());
Message msg = new Message();
msg.what = 1001;
Bundle data = new Bundle();
data.putString("result", ret);
data.putInt("int",i);
msg.setData(data);
mHandler.sendMessage(msg);
}
}
} else if (list.get(i).getTesttype().equals("2")) {
//查询软化点
listsp = userDao.dbQueryAllSP(list.get(i).getSampleNumber(),list.get(i).getTestNumber());
if (listsp.size() > 0) {
//沥青针入度再次插入网络服务器
for (int isp = 1; isp < listsp.size(); isp++) {
ret = DBUtil.AddSPSQL(
listsp.get(isp).getSampleNumber()
, listsp.get(isp).getTestNumber()
, listsp.get(isp).getSpec_code()
, Float.valueOf(Double.toString(listsp.get(isp).getDto()))
, Float.valueOf(Double.toString(listsp.get(isp).getsoften_point1())), Float.valueOf(Double.toString(listsp.get(isp).getsoften_point2())), Float.valueOf(Double.toString(listsp.get(isp).getsoften_point16())), listsp.get(isp).getProjectPartuse()
, listsp.get(isp).getLqKind(), listsp.get(isp).getLqMarkGrade());
Message msg = new Message();
msg.what = 1001;
Bundle data = new Bundle();
data.putString("result", ret);
data.putInt("int",i);
msg.setData(data);
mHandler.sendMessage(msg);
}
}
} else if (list.get(i).getTesttype().equals("3")) {
//查询马歇尔
listdm = userDao.dbQueryAllDM("",list.get(i).getSampleNumber(),list.get(i).getTestNumber());
if (listdm.size() > 0) {
for (int idm = 1; idm < listdm.size(); idm++) {
ret = DBUtil.AddDMSQL(
listdm.get(idm).getSampleNumber()
, listdm.get(idm).getTestNumber()
, Integer.valueOf(listdm.get(idm).getSpec_code())
, listdm.get(idm).getDs()
, listdm.get(idm).getDf()
, listdm.get(idm).getProjectPartuse()
, listdm.get(idm).getLqKind()
, listdm.get(idm).getLqMarkGrade());
Message msg = new Message();
msg.what = 1001;
Bundle data = new Bundle();
data.putString("result", ret);
data.putInt("int",i);
msg.setData(data);
mHandler.sendMessage(msg);
}
}
}
}
}
};
/*添加成功后删除记录表中的记录*/
new Thread(run).start();
}catch (Exception e){
e.printStackTrace();
}
}
3、ContentProvider
4、文件存储
5、网络流