数据库通知
❶ android安卓数据库的增删改查和发送通知
java">{
privatestaticfinalStringname="zhouke.db";
privatestaticfinalintversion=1;
publicMyDbOpenHeler(Contextcontext){
super(context,name,null,version);
}
@Override
publicvoidonCreate(sqliteDatabasedb){
db.execSQL("createtableifnotexistsword(_,namevarchar(20),ageint)");
}
@Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
}
}
------------------------------------------------
{
ListViewlv;
MyDbOpenHelerheler;
SQLiteDatabasedb;
SimpleCursorAdapteradapter;
EditTextet1;
//通知
NotificationManagermanage;
//---
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
lv=(ListView)findViewById(R.id.lv);
//实例化数据库帮助类
heler=newMyDbOpenHeler(this);
//获取一个可读写的数据库操作对象
db=heler.getWritableDatabase();
Cursorword=db.query("word",null,null,null,null,null,"_iddesc");
adapter=newSimpleCursorAdapter(this,R.layout.list_ltem,word,
newString[]{"_id","name","age"},newint[]{R.id.tv1,R.id.tv2,R.id.tv3},
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
lv.setAdapter(adapter);
//if(word.isClosed()){
//word.close();
//}
registerForContextMenu(lv);
//通知的实例化
manage=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
//---
et1=(EditText)findViewById(R.id.et1);
}
//创建选项菜单
@Override
(Menumenu){
menu.add(1,1,0,"增");
returnsuper.onCreateOptionsMenu(menu);
}
//选项菜单监听事件
@Override
(MenuItemitem){
Viewinflate=View.inflate(this,R.layout.dialog,null);
finalEditTextet1=(EditText)inflate.findViewById(R.id.et1);
finalEditTextet2=(EditText)inflate.findViewById(R.id.et2);
newAlertDialog.Builder(this).setTitle("增加新学生信息").setView(inflate)
.setPositiveButton("确认",newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
ContentValuescv=newContentValues();
cv.put("name",et1.getText().toString());
cv.put("age",et2.getText().toString());
longword=db.insert("word",null,cv);
if(word>0){
Toast.makeText(Main2Activity.this,"增加数据成功",Toast.LENGTH_SHORT).show();
Cursorword2=db.query("word",null,null,null,null,null,"_iddesc");
adapter.changeCursor(word2);
//通知---开始
NotificationCompat.Builderbuilder=newNotificationCompat.Builder(Main2Activity.this);
builder.setSmallIcon(R.drawable.aa)
.setContentText("年龄:"+et2.getText().toString())
.setContentTitle(et1.getText().toString())
.setAutoCancel(true);
manage.notify(1,builder.build());
//通知--结束
}
}
}).setNegativeButton("取消",newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
}
}).show();
returnsuper.onOptionsItemSelected(item);
}
//创建上下文菜单
@Override
publicvoidonCreateContextMenu(ContextMenumenu,Viewv,ContextMenu.ContextMenuInfomenuInfo){
super.onCreateContextMenu(menu,v,menuInfo);
menu.add(1,2,0,"修改");
menu.add(1,3,0,"删除");
}
//上下文菜单监听事件
@Override
(MenuItemitem){
//获取当前点击项的索引
AdapterView.AdapterContextMenuInfoinfo=(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
intposition=info.position;
//根据索引获取这一行数据,把它转化为Cursor
Cursorcursor=(Cursor)adapter.getItem(position);
//从结果集中取出id
finalint_id=cursor.getInt(0);
switch(item.getItemId()){
case2:
Viewinflate=View.inflate(this,R.layout.dialog,null);
finalEditTextet1=(EditText)inflate.findViewById(R.id.et1);
finalEditTextet2=(EditText)inflate.findViewById(R.id.et2);
//获取单词名称
Stringname=cursor.getString(1);
Stringage=cursor.getString(2);
et1.setText(name);
et2.setText(age);
newAlertDialog.Builder(this).setTitle("修改学生信息").setView(inflate)
.setPositiveButton("确认",newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
ContentValuescv=newContentValues();
cv.put("name",et1.getText().toString());
cv.put("age",et2.getText().toString());
intword=db.update("word",cv,"_id=?",newString[]{String.valueOf(_id)});
if(word>0){
Toast.makeText(Main2Activity.this,"修改数据成功",Toast.LENGTH_SHORT).show();
Cursorword2=db.query("word",null,null,null,null,null,"_iddesc");
adapter.changeCursor(word2);
}
}
}).setNegativeButton("取消",newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
}
}).show();
break;
case3:
intword=db.delete("word","_id=?",newString[]{String.valueOf(_id)});
if(word>0){
Toast.makeText(Main2Activity.this,"删除数据成功",Toast.LENGTH_SHORT).show();
Cursorword2=db.query("word",null,null,null,null,null,"_iddesc");
adapter.changeCursor(word2);
}
break;
}
returnsuper.onContextItemSelected(item);
}
publicvoidclick1(Viewview){
//模糊查询
Stringaa=et1.getText().toString();
Cursorword2=db.query("word",null,"namelike?",newString[]{"%"+aa+"%"},null,null,"_iddesc");
adapter.changeCursor(word2);
//正常查询
//Cursorword2=db.query("word",null,"name=?",newString[]{aa},null,null,"_iddesc");
}
}
❷ Android 安卓数据库操作和通知
public class DBHelper extends SQLiteOpenHelper { public static final String TB_NAME = "mydemo_user"; public static final String ID = "_id"; public static final String NAME = "username"; public static final String PASSWORD = "passname"; public static final String ISCHECK = "ischecked"; //当前版本 public static int version = 1; /** * 构造函数 * @param context Context类型,上下文对象。 * @param name String类型,数据库的名称 * @param factory CursorFactory类型 * @param version int类型,数据库版本 */ public DBHelper(Context context, String name, CursorFactory factory,int version) { super(context, name, factory, version); this.getWritableDatabase(); } public void Close() { this.getWritableDatabase().close(); } /** * 创建数据库 */ public void onCreate(SQLiteDatabase db) { db.beginTransaction(); try{ db.execSQL("CREATE TABLE IF NOT EXISTS " + TB_NAME + " (" + ID + " INTEGER PRIMARY KEY," + NAME + " VARCHAR," + PASSWORD + " VARCHAR," + ISCHECK + " VARCHAR)"); db.setTransactionSuccessful(); }catch (Exception e) { } finally { db.endTransaction();//此时不能关闭数据库,不然创建数据库完成后,数据库不能使用 } } /** * 删除数据库 */ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TB_NAME); onCreate(db); } /** * 添加新用户 * @param name * @param number */ public void addUser(String username, String password,String isChecked) { ContentValues values = new ContentValues(); values.put(DBHelper.NAME, username); values.put(DBHelper.PASSWORD, password); values.put(DBHelper.ISCHECK, isChecked); this.getWritableDatabase().insert(DBHelper.TB_NAME, DBHelper.ID, values); } /** * 删除单个用户 * @param id */ public void delUser(int id) { this.getWritableDatabase().delete(DBHelper.TB_NAME, DBHelper.ID + " = " + id, null); } /** * 修改单个用户 * @param id */ public void updateUser(int id,String username, String password,String isChecked) { ContentValues values = new ContentValues(); values.put(DBHelper.NAME, username); values.put(DBHelper.PASSWORD, password); values.put(DBHelper.ISCHECK, isChecked); String where = DBHelper.ID+"=?";//设置条件 String[] whereValue = {Integer.toString(id)};//设置条件中的参数 this.getWritableDatabase().update(DBHelper.TB_NAME, values, where, whereValue); } /** * 删除多个用户 */ public void delAllUser() { this.getWritableDatabase().delete(DBHelper.TB_NAME, null, null); } /** * 查询 * @param username * @return */ public List<Users> queryUser(String username){ List<Users> data = new ArrayList<Users>(); String[] columns = { DBHelper.ID, DBHelper.NAME, DBHelper.PASSWORD,DBHelper.ISCHECK }; String[] parms = { username }; String where = DBHelper.NAME + "=?";// 设置条件 Cursor result=null; if(username!=null){ result = this.getWritableDatabase().query(DBHelper.TB_NAME,columns, where, parms, null, null, null); }else{ result = this.getWritableDatabase().query(DBHelper.TB_NAME,columns, null, null, null, null, null); } result.moveToFirst();//移动到第一行 while (!result.isAfterLast()) {//遍历数据 Users user = new Users(result.getInt(0), result.getString(1),result.getString(2), result.getString(3)); data.add(user); result.moveToNext(); } result.close(); return data; } }
❸ 如果实现数据库一改动或添加就通知我的程序
是数据库中的数据改动,还是数据库结构改动?
如果是数据改动可以通过触发器实现
❹ gauss数据库中数据改变,怎么通知springboot项目
使用mysql_udf_http(根据mysql表自动触发发送http请求通知后端。
后端使用websocket通知s前端进行数据更新。具体步骤
1.在数据库中创建一个副表来标记是否为新的报修信息。
2.spring后端采用TaskScheler轮询数据库。
3.如有新的报修信息插入则通过websocket来通知web管理端(一个或多个都可以实时接收)
4.前端采用websocket来实时接收。
❺ mysql数据库更改通知特性
数据库知识存了一个URL的字符串,具体的逻辑还是要通过程序来执行的:
比如:对数据库进行增删改,程序就打开某个页面,这个页面的地址就是:数据库中的URL字符串
❻ 如何使用SqlDependency监听SqlServer2005数据库变更通知
在 Microsoft SQL Server 2005 中以及 ADO.NET 2.0 的 System.Data.SqlClient 命名空间中引入的。查询通知建立在 Service Broker 基础结构的基础上,使应用程序可以在数据更改时收到通知。
如果应用程序提供数据库中信息的缓存(例如 Web 应用程序),需要在源数据更改时接收通知,此功能特别有用。
❼ 数据库数据变化如何通知
一个mvc架构的程序,其中一个用户在页面上增删改数据,如何做到这个用户一操作,就在别的用户的页面上立刻实现实时刷新。
我知道使用ajax轮询数据可以实现这个需求,但不太想用这种方法,感觉有点浪费性能,请问各位大神,有好点的解决方法吗?
❽ oracle数据库怎么主动发出通知
oracle数据库怎么主动发出通知
可以用DBMS_PIPE包利用管道和外部程序通信的。
具体用法:
使用dbms_pipe.create_pipe('mypipe'); 建立一个管道。
在表上建立触发器判断如果是某一行发生变更,使用dbms_pipe.send_message('MyMessage');
向管道发送消息
java做轮询使用dbms_pipe.receive_message('mypipe',15); 接收管道消息。如果有则显示更新。
管道不用了,使用dbms_pipe.remove_pipe('mypipe');将管道删除。
❾ 数据库数据发生变化,如何通知客户端呢
在页面中添加一个隐藏的iframe不断刷新或者使用ajax对某个页面进行轮询,目的就是不停的请求一个页面,这个页面可以只返回一个简单的标识,用来返回数据是否已经改变(或者还可以加上新数据是什么,推荐使用JSON)
这样就可以“即时”获取到服务器端的数据变动了,时间可以比较频繁,比如5秒甚至更频繁,没有办法完全实时,因为服务器端无法主动发消息给客户端!