如果您对SQLiteException:nosuchcolumn:好感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于SQLiteException:nosuchcolumn:
如果您对SQLiteException: no such column:好感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于SQLiteException: no such column:好的详细内容,并且为您提供关于android.database.sqlite.SQLiteBindOrColumnIndexOutOfRangeException的实例源码、c3p0 连接池:com.mysql.cj.exceptions.InvalidConnectionAttributeException、Cause java.sql.SQLException Column count doesn‘t match value count at row 1、Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ''p.knowlege_...的有价值信息。
本文目录一览:- SQLiteException: no such column:好
- android.database.sqlite.SQLiteBindOrColumnIndexOutOfRangeException的实例源码
- c3p0 连接池:com.mysql.cj.exceptions.InvalidConnectionAttributeException
- Cause java.sql.SQLException Column count doesn‘t match value count at row 1
- Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ''p.knowlege_...
SQLiteException: no such column:好
今天在使用Android SQLite数据库时碰到下面的错误:
Caused by: android.database.sqlite.SQLiteException: no such column: 好
代码如下:
Cursor cr = db.query(DBHelper.TABLE_LOCKS, columns, "lname=" + name, null,
null, null, null);
在网上查阅了很多资料后,发现是由于查询的lname列元素为String类型,而查询语句中的String要用单引号引起来,代码修改后正确,正确形式如下:
Cursor cr = db.query(DBHelper.TABLE_LOCKS, columns, "lname=''" + name +"''", null,
null, null, null);
android.database.sqlite.SQLiteBindOrColumnIndexOutOfRangeException的实例源码
private void onsqliteError(sqliteException e) { if ( e instanceof sqliteBindOrColumnIndexOutOfRangeException || e instanceof sqliteConstraintException || e instanceof sqliteDatabaseCorruptException || e instanceof sqliteDatatypeMismatchException ) { // If a migration did not go well,the best we can do is drop the database and re-create // it from scratch. This is hackish but should allow more or less graceful recoveries. TrackHelper.track().event("Office","cache.db.error").name("critical").value(1f).with(tracker); Log.e(TAG,"Critical database error. Droping + Re-creating",e); close(); ctx.deleteDatabase(DB_NAME); } else { // Generic error. Close + re-open Log.e(TAG,"Datable "+e.getClass().getName()+". Closing + re-opening",e); TrackHelper.track().event("Office","cache.db.error").name(e.getClass().getName()).value(1f).with(tracker); close(); } }
private void bindArguments(PreparedStatement statement,Object[] bindArgs) { final int count = bindArgs != null ? bindArgs.length : 0; if (count != statement.mNumParameters) { String message = "Expected " + statement.mNumParameters + " bind arguments but " + count + " were provided."; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { throw new sqliteBindOrColumnIndexOutOfRangeException(message); } else { throw new sqliteException(message); } } if (count == 0) { return; } final long statementPtr = statement.mStatementPtr; for (int i = 0; i < count; i++) { final Object arg = bindArgs[i]; switch (getTypeOfObject(arg)) { case Cursor.FIELD_TYPE_NULL: nativeBindNull(mConnectionPtr,statementPtr,i + 1); break; case Cursor.FIELD_TYPE_INTEGER: nativeBindLong(mConnectionPtr,i + 1,((Number)arg).longValue()); break; case Cursor.FIELD_TYPE_FLOAT: nativeBindDouble(mConnectionPtr,((Number)arg).doubleValue()); break; case Cursor.FIELD_TYPE_BLOB: nativeBindBlob(mConnectionPtr,(byte[])arg); break; case Cursor.FIELD_TYPE_STRING: default: if (arg instanceof Boolean) { // Provide compatibility with legacy applications which may pass // Boolean values in bind args. nativeBindLong(mConnectionPtr,(Boolean) arg ? 1 : 0); } else { nativeBindString(mConnectionPtr,arg.toString()); } break; } } }
c3p0 连接池:com.mysql.cj.exceptions.InvalidConnectionAttributeException
1 遇到的错误 com.mysql.cj.exceptions.InvalidConnectionAttributeException:
1 四月 17, 2019 10:21:13 上午 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager
2 信息: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 2udui8a2beimx6x8ptry|2f4d3709, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 2udui8a2beimx6x8ptry|2f4d3709, idleConnectionTestPeriod -> 0, initialPoolSize -> 20, jdbcUrl -> jdbc:mysql://localhost:3306/test, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 30, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 30, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 10, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]
3 Loading class `com.mysql.jdbc.Driver''. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver''. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
4 四月 17, 2019 10:21:33 上午 com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run
5 警告: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@26aa877c -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
6 四月 17, 2019 10:21:33 上午 com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run
7 警告: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@26aa877c -- APPARENT DEADLOCK!!! Complete Status:
8 Managed Threads: 3
9 Active Threads: 3
10 Active Tasks:
11 ....
12 Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value ''???ú±ê×??±??'' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
13 at sun.reflect.GeneratedConstructorAccessor32.newInstance(Unknown Source)
14 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
15 at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
16 at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
17 at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85)
18 at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:132)
19 at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2234)
20 at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2258)
21 at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1319)
22 at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:966)
23 at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
24 ... 11 more
2 解析
参考博客地址:https://blog.csdn.net/weixin_37577564/article/details/80329775
the server time zone value ''???ú±ê×??±??'' is unrecognized or represents more than one time zone.
出现这个的原因是因为 mysql 返回的时间总是有问题,比实际时间要早 8 小时。
在 jdbc 连接的 url 后面加上 serverTimezone=GMT 即可解决问题,如果需要使用 gmt+8 时区,需要写成 GMT%2B8
3 解决方法
注意:首先检查 mysql-connector-java-xxx.jar 的版本,若过低,升成 8.0.13
3.1 如果是在 Java 工具类里:
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false");
3.2 如果是在配置文件里:
<property name="jdbcUrl">jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false</property>
以上,吼吼
Cause java.sql.SQLException Column count doesn‘t match value count at row 1
Cause: java.sql.sqlException: Column count doesn‘t match value count at row 1
Cause: java.sql.sqlException: Column count doesn’t match value count at row 1错误,原因是你在XML中,写插入方法的sql语句时,假如有10个列,但你只给其中的9个赋值了
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ''p.knowlege_...
MyBatis 中,出现 Unknown column 的提示是 mapper.xml 中的数据库字段写错了。
错误示例:
XxMapper.xml 中
<sql id="KnowlegeSectionAndPart_Column_List">
s.knowledge_section_id, s.create_time, s.update_time, s.section_name,
s.repository_id, s.bool_close, p.knowlege_part_id, p.create_time,
p.update_time, p.repository_id, p.section_id, p.bool_close, p.part_name
</sql>
<!-- 通过章id查询章及其节-->
<select id="getKnowlegeSectionWithPartDOById" parameterType="java.lang.Long"
resultMap="KnowlegeSectionWithPartResultMap">
select
<include refid="KnowlegeSectionAndPart_Column_List"/>
from knowlege_section s
where s.knowledge_section_id = #{sid,jdbcType=BIGINT}
</select>
报错:


1 ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ''p.knowlege_part_id'' in ''field list''
2 ### The error may exist in file [D:\IDEACode\YiZhiDu\ChangJiangRiver\target\chang_jiang_river\WEB-INF\classes\com\hzy\mapper\KnowlegeSectionDOMapper.xml]
3 ### The error may involve com.hzy.dao.KnowlegeSectionDOMapper.getKnowlegeSectionWithPartDOById-Inline
4 ### The error occurred while setting parameters
5 ### SQL: select s.knowledge_section_id, s.create_time, s.update_time, s.section_name, s.repository_id, s.bool_close,p.knowlege_part_id, p.create_time, p.update_time, p.repository_id, p.section_id, p.bool_close, p.part_name from knowlege_section s where s.knowledge_section_id = ?
6 ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ''p.knowlege_part_id'' in ''field list''
7 ; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ''p.knowlege_part_id'' in ''field list''] with root cause
8 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ''p.knowlege_part_id'' in ''field list''
9 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
10 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
11 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
12 at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
13 at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
14 at com.mysql.jdbc.Util.getInstance(Util.java:387)
15 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:939)
16 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)
17 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)
18 at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478)
19 at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625)
20 at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551)
21 at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
22 at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1192)
23 at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:67)
24 at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:59)
25 at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:73)
26 at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:60)
27 at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:267)
28 at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:137)
29 at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:96)
30 at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:143)
31 at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:60)
32 at com.sun.proxy.$Proxy67.query(Unknown Source)
33 at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108)
34 at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102)
35 at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:66)
36 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
37 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
38 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
39 at java.lang.reflect.Method.invoke(Method.java:498)
40 at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:386)
41 at com.sun.proxy.$Proxy24.selectOne(Unknown Source)
42 at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:165)
43 at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:68)
44 at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)
45 at com.sun.proxy.$Proxy25.getKnowlegeSectionWithPartDOById(Unknown Source)
46 at com.hzy.knowlege.impl.KnowlegeServiceImpl.getKnowlegeSectionWithPartDOById(KnowlegeServiceImpl.java:100)
47 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
48 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
49 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
50 at java.lang.reflect.Method.invoke(Method.java:498)
51 at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
52 at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
53 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
54 at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
55 at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
56 at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
57 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
58 at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
59 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
60 at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
61 at com.sun.proxy.$Proxy28.getKnowlegeSectionWithPartDOById(Unknown Source)
62 at com.hzy.controller.KnowlegeController.getKnowlegeSectionWithPartById(KnowlegeController.java:122)
63 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
64 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
65 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
66 at java.lang.reflect.Method.invoke(Method.java:498)
67 at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
68 at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
69 at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
70 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776)
71 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
72 at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
73 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
74 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
75 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
76 at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)
77 at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
78 at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
79 at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
80 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
81 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
82 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
83 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
84 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
85 at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87)
86 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
87 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
88 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
89 at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
90 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
91 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
92 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
93 at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
94 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
95 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
96 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
97 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
98 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
99 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
100 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
101 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
102 at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
103 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
104 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
105 at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
106 at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
107 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853)
108 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587)
109 at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
110 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
111 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
112 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
113 at java.lang.Thread.run(Thread.java:745)
修改(添加 knowlege_part p):
<!-- 通过章id查询章及其节-->
<select id="getKnowlegeSectionWithPartDOById" parameterType="java.lang.Long"
resultMap="KnowlegeSectionWithPartResultMap">
select
<include refid="KnowlegeSectionAndPart_Column_List"/>
from knowlege_section s, knowlege_part p
where s.knowledge_section_id = #{sid,jdbcType=BIGINT}
</select>
回调成功:
总结:
所有被查询的字段,如果数据库表有别名,那么对应的字段也必须有别名,反之亦然。
今天关于SQLiteException: no such column:好的讲解已经结束,谢谢您的阅读,如果想了解更多关于android.database.sqlite.SQLiteBindOrColumnIndexOutOfRangeException的实例源码、c3p0 连接池:com.mysql.cj.exceptions.InvalidConnectionAttributeException、Cause java.sql.SQLException Column count doesn‘t match value count at row 1、Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ''p.knowlege_...的相关知识,请在本站搜索。
本文标签: