barriers / 阅读 / 详情

每次在Android studio中复写或实现父类方法总是会出现@Nullable 怎么去掉

2023-08-24 21:53:24
共1条回复
陶小凡

  1. 首先需要明确的是@Nullable,表明当前的参数可以为null,否则不为null

  2. 这个@Nullable参数在重写某个方法时自动添加,更好理解某个方法参数的含义

  3. 该标签根据经验总结,只会在某些重写的方法中出现,所以可以放心使用,不影响操作

相关推荐

nullable是什么意思

nullable的意思是:允许空值;值类型;可空类型。可空类型也是值类型,但它是包含null值的值类型:int?nullable=null;int?就是可空的int类型。很明显,这又是一个语法糖,肯定不会存在int?这样的类型。对于编译器而言,int?会被编译成Nullable<int>类型,即可空类型。如果把一个没有值的可空类型装箱之后再拆箱,不能拆箱为非可空类型的值类型,否则会抛出NullReferenceException异常。因为没有值的可空类型装箱后obj等于null,即引用一个空地址。当把一个可空类型赋给引用类型变量时,CLR会对可空类型(Nullable<T>)对象进行装箱处理。CLR首先检测可空类型是否为null。如果有null,CLR将不会进行实际的装箱操作(因为null可以直接赋值给一个引用类型变量)。如果不为null,CLR则从可空类型对象中获取值,并对该值进行装箱(即值类型的装箱过程)。当把一个已装箱的值类型赋值给可空类型变量时,CLR会对已装箱的值类型进行拆箱处理。如果已装箱值类型的引用为null,则CLR会把可空类型也设为null。可空类型的运行结果:1、通过GetType方法来获得赋值的可空类型时,返回的将是赋值的类型,在前面的的代码中即是System.Int32,而不是System.Nullable<System.Int32>类型。2、对已赋值的可空类型装箱后,如果使用GetType函数去获得装箱后的引用类型,输出的将仍然是赋值的类型,在前面的代码中即为System.Int32。3、还有一点必须要注意:没有值的可空类型在调用GetType函数之前,编译器会对可空类型进行装箱操作,使其变为null,即空引用。所以之后再调用GetType函数时,就会抛出空引用异常了。
2023-08-18 13:58:521

数据库里建表.有一项是Nullable这一项是什么意思

意思是说这个表的这个字段是允许空值的。插入操作的时候不指定值也是可以的
2023-08-18 13:59:222

数据库里建表.有一项是Nullable这一项是什么意思

Nullable就是字段是否可以为null,如果是yes就是可以为null,否则不可以。
2023-08-18 13:59:321

@nullable 这个注解是什么意思

@Override 重载@Nullable 参数可为null@Nullable是用户自定义的注解,具体什么含义还要看情况,一般情况下这种Nullable用来实现null object模式
2023-08-18 13:59:391

C# 可以为null 的类型

可以为 null 的类型是 System.Nullable<T> 结构体的实例。可以为null的类型可以表示一个基础类型的所有值 T ,还可再表示一个 null 值。T 不能是引用类型,因为引用类型本身就可以为null。 使用运算符 ?? 不要使用强制类型转换的方式!运行时假如可为null 的值恰好为null,将引发异常
2023-08-18 13:59:471

hibernate如果设置了unique=true,还有必要设置nullable=false吗?

需要,如果不设置允许一个null,设置的就不能为空,且唯一
2023-08-18 14:00:022

C# 如何声明一个字段为可空类型

定义时加个?
2023-08-18 14:00:302

Android studio怎么查看使用@Nullable和NotNull

  方法/步骤  1  要进行检查的的空指针的问题,那么在就需要进行使用Android studio的启动的应用的程序。   2  那么在Android studio的进行导入一个APP的代码,进行点击Android studio菜单中的Analyze的菜单选项。   3  然后就会弹出了一个下拉的菜单中的进行选择infer nullity的选项。   4  就会弹出了specify infer nullity scope的框中,进行选框中的custom scope的选项。   5  选中完成之后,然后就会弹出了一个下拉菜单中的“current file”的选项。   6  那么就会弹出了一个infer nullity annotations的选项,进行点击OK的即可,就会进行对空指针进行检查。
2023-08-18 14:00:561

请教高手:error:Nullable object must have a value

空对象必须要赋值。
2023-08-18 14:01:052

oracle怎么校验字段是否为非空约束

desc 表名
2023-08-18 14:01:224

在c++中可以为int类型赋空值吗?怎么赋呢?

当然不可以,楼上的别乱说。null 在其它语言中其实相当于C++中的指针为NULL,而不是基本类型。基本类型不可能没有值。即可以 int *pi = NULL;而int i = NULL; 是错误的,因为在这种情况下 NULL 其实代表 0.
2023-08-18 14:01:342

FluorineFx,如何实现与.net后台的Nullable(System.Guid)类型进行映射呢?

方案1、修改Flexpublic var UserKey:Objectinternal var objUserKey:String;然后提取值objUserKey = UserKey.toString();这样才能提取方案二:在.Net修改类型public String UserKey{get{return value};set{value=(new GUID()).ToString()}}
2023-08-18 14:01:591

non-nullable是什么意思

non-nullable非空的
2023-08-18 14:02:061

C#中的??是什么意思

方法和属性 是属于类的成员就是说类包括属性和方法,例如,人比作一个类,人的属性就有:名字,性别,年龄等(变量或是常量),人的方法就有:吃饭,睡觉,上班等(运算,计算,事情)。事件可以理解为现实生活中发生的各种事情,委托就说个例子吧例如,第一天,老板找了个秘书并教给秘书怎么做工作,第二天,老板拿了一堆文件放到秘书办公桌上,对秘书说帮我处理完这写报表,这就形成了一个委托,老板委托秘书帮他完成一份工作, 就是事先写好方法,事后调用。
2023-08-18 14:02:4413

结构数据组中间的元素怎么赋为null,新手求教!C#

null是字符型
2023-08-18 14:03:234

oracle中:要修改为null的列无法修改为null

id列你之前不是定义为不允许为null吗。。。
2023-08-18 14:03:332

hibernate4 版本为什么要把 NullableType 类作废?

Dear在source的头部注释上写明用AbstractStandardBasicType类来替代NullableType.比如before: org.hibernate.Hibernate.BIG_DECIMAL.getName() after: BigDecimalType.INSTANCE.getName()-------------------------- from 四年后的答案.
2023-08-18 14:03:581

java中的空指针异常怎么解决

找到异常位置,处理null,可以加if等
2023-08-18 14:04:162

Android开发 - 处理 null 和 预防空指针异常(NullPointerException) 的一些经验

在实际编码中总是会遇到 空指针异常 ,本文总结了一些处理空指针的个人经验。 尽早的检查,尽早的失败。 比如: 通过intent传参到新的目标 activity,而且一定需要这个参数,那么在新的目标activity中 onCreate方法中 判断中这个参数,如果null,直接抛出空指针异常让程序崩溃。取代在使用该参数时进行检查,这样能更早的发现问题。或者在 一个普通的方法中,一个 参数必须不能为null ,那么我们在这个方法的第一行就做出判断,如果参数为null,抛出空指针异常。 1.不要在Set中使用null 2.不要把null作为map的键值。 3.尽可能的尽早检查,如果为 null 不执行或者 结束本方法 4.遇到必须的参数,比如通过intent传参到新的目标 activity,而且一定需要这个参数,那么在新的目标activity中判断是否有参数 5.判断字符串是否空 6.对字符串比较时,如果和常量进行比较,把常量放在前面,比如: 7.将某个对象 toString时,比如: 8.使用注解 @NonNull 和 @Nullable 配合AndroidStudio 帮你检查你是否没有检查可能为null的对象,或者你是否做了多余的检查。 9.我们引用Guava来帮忙检查 null 的情况,我们使用 checkNotNull 方法来替代写 if( obj == null) throw new NullPointExcetion(); ,示例: Guava是什么: http://ifeve.com/google-guava/
2023-08-18 14:04:361

C#代码中的问号是什么意思

你代码贴出来看一下
2023-08-18 14:05:051

hibernate里@Column(name = "COST_PRICE", unique = true, nullable = false, precision = 10,scale = 2)

(1)precision=10代表有效数字为10位,即从左边第一个不为0的数字开始到最右边的位数,scale=2代表的就是小数点右边的位数。(2)底层数据库的细节对于hibernate来说是透明的,也就是无论什么数据库你都可以按这样子来设置,hibernate会自动帮你完成底层操作。(3)当然是一致的,一般我们都是用hibernate的实体生成工具来生成实体类,很少有手工写的。
2023-08-18 14:05:131

java有什么注解前置前拦截

本文将用简洁的代码构建一个springboot的拦截器。拦截器的使用很简单,定义一个自己的拦截器,向配置中添加一下就可以使用。为了方便,之后又引入了注解。目录和概述概述假设需求:访问项目的controller是都要进行"token验证",除了某些像登录之类的方法。项目结构:TokenInterceptor.java 自定义拦截器InterceptorConfig.java 添加拦截器进入项目NoNeedToken.java 自定义注解TestController.java 测试接口1、自定义拦截器在 TokenInterceptor.java 中输入以下代码,以下的代码将生成一个在请求到达controller前进行拦截的拦截器import com.alibaba.fastjson.JSONObject;import org.springframework.lang.Nullable;import org.springframework.stereotype.Component;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.PrintWriter;import java.util.Arrays;import java.util.List;@Componentpublic class TokenInterceptor implements HandlerInterceptor {undefined// 假设现在的token有如下数据List tokenList = Arrays.asList("111", "222", "333");// 这个方法是在访问接口之前执行的,我们只需要在这里写验证登陆状态的业务逻辑,就可以在用户调用指定接口之前验证登陆状态了@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {undefined// 设置返回为json格式,使用UTF-8response.setCharacterEncoding("UTF-8");response.setContentType("application/json; charset=utf-8");String token = request.getHeader("token");PrintWriter out;// 之后写你的判断逻辑:return true是通过拦截器,可以继续访问controller,return false是不通过if (token == null || !tokenList.contains(token)) {undefined// 如果失败了返回{state:"false", msg:"token is null or wrong"}JSONObject res = new JSONObject();res.put("state","false");res.put("msg","token is null or wrong");out = response.getWriter();out.append(res.toString());return false;}// 否则返回true 进入controllerreturn true;}public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {undefined}public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {undefined}}————————————————版权声明:本文为CSDN博主「魔王别嚣张」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/weixin_36481714/article/details/114888055
2023-08-18 14:05:361

C#中的预处理指令有哪些呢?

在 C# 中,预处理指令(Preprocessor Directives)用于在编译代码之前执行一些特定的操作,例如定义常量、判断条件、包含文件等。下面是 C# 中所有的预处理指令:#define:定义一个常量,可以在代码中使用。#undef:取消定义一个常量。#if、#else、#elif、#endif:用于条件编译,根据条件编译不同的代码块。#warning、#error:用于发出编译警告或错误。#line:用于修改编译器行号信息。#region、#endregion:将代码块包含在一个区域中,方便折叠和管理代码。#pragma:用于修改编译器的行为。#nullable:用于控制可空引用类型的行为。#nullable enable:启用可空引用类型。#nullable disable:禁用可空引用类型。#nullable restore:还原可空引用类型的状态。
2023-08-18 14:05:541

在Android中,Android已经把各种功能封装成各种类,请写出使用这些类的方法?

在Android中,确实有许多功能被封装成各种类,可以方便地使用它们来实现各种功能。以下是一些常见的Android类及其使用方法:Activity:Activity是Android中一个基本的组件,用于表示用户界面(UI)的一个屏幕。要使用Activity,您需要继承android.app.Activity类并实现其方法,如onCreate()。import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}}Fragment:Fragment是可重用的UI组件,可以在多个Activity中使用。要使用Fragment,您需要继承androidx.fragment.app.Fragment类并实现其方法,如onCreateView()。import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.fragment.app.Fragment;public class MyFragment extends Fragment {@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_my, container, false);return view;}}BroadcastReceiver:BroadcastReceiver是用于接收来自其他应用或系统的消息的组件。要使用BroadcastReceiver,您需要继承android.content.BroadcastReceiver类并实现onReceive()方法。import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;public class MyBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "Received broadcast", Toast.LENGTH_SHORT).show();}}Adapter:Adapter用于在数据和UI组件之间建立关联,例如在ListView或RecyclerView中显示数据。要使用Adapter,您需要继承相应的Adapter类,如ArrayAdapter或RecyclerView.Adapter,并实现其方法。import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.TextView;import java.util.ArrayList;public class MyAdapter extends ArrayAdapter<String> {public MyAdapter(Context context, ArrayList<String> items) {super(context, 0, items);}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);}String item = getItem(position);TextView textView = convertView.findViewById(R.id.textview_item);textView.setText(item);return convertView;}}这些仅仅是Android中众多类的一部分。为了充分利用这些类,您需要查阅官方文档,了解它们的功能、属性和方法。同时,实践是最好的老师,通过编写代码并测试它们,您将更好地理解如何在Android项目中应用这些类。
2023-08-18 14:06:021

linq to sql 如何返回两个日期的天数差值

SqlFunctions.DateDiff 方法 (String, Nullable(Of DateTime), Nullable(Of DateTime)) .NET Framework 4返回所指定开始日期和结束日期之间的指定 datepart 边界的计数。命名空间: System.Data.Objects.SqlClient程序集: System.Data.Entity(在 System.Data.Entity.dll 中)语法--------------------------------------------------------------------------------C#C++F#VB复制[EdmFunctionAttribute("SqlServer", "DATEDIFF")]public static Nullable<int> DateDiff( string datePartArg, Nullable<DateTime> startDate, Nullable<DateTime> endDate)参数datePartArg类型:System.String要计算时间间隔差值的日期部分。startDate类型:System.Nullable(Of DateTime)第一个日期。endDate类型:System.Nullable(Of DateTime)第二个日期。返回值类型:System.Nullable(Of Int32)两个日期之间的时间间隔数。备注--------------------------------------------------------------------------------无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。此函数将被转换为数据库中对应的函数。有关相应 SQL Server 函数的信息,请参见 DATEDIFF (Transact-SQL)。
2023-08-18 14:06:101

sql 表连接 连接条件为NULL时

select distinct a.enterprisecode, a.orgcode, a.orgdesc, a.orgtype, a.parentorgcode, b.orgdesc, a.isenabled from organizations a left join organizations b on a.parentorgcode = b.orgcode where (a.enterprisecode in ("bj", "zb") and a.orgdesc like "%物流部%") or (a.parentorgcode is null and b.orgcode="bjzx") order by a.enterprisecode,a.parentorgcode
2023-08-18 14:06:281

iOS的UIPageViewController翻页视图控制器讲解

  一、引言   UIPageViewController是iOS中少见的动画视图控制器之一,通过它既可以创建类似UIScrollView与UIPageControl结合的滚屏视图,也可以创建类似图书效果的炫酷翻页视图。   UIPageViewController在iOS 5 SDK中首次引入,它使得开发者可以使用这个ViewController创建分页视图。在iOS 6中,这个类有了更新,支持滚动过渡效果。使用Page View,用户可以方便的通过手势在多个页面之间导航。UIPageViewController并不仅仅用于引导页,很多游戏,例如:愤怒的小鸟,就是用Page View来展示关卡选择的页面,还有有关书籍的应用,用这个类来显示书的页面。   UIPageViewController是个高度可配置的类,你可以进行如下配置:   分页的方向——水平或垂直 翻页的样式——书卷翻页或者滑动翻页 书脊位置——只有书卷翻页样式有效 页面间距——只有滑动翻页样式有效,用来定义页面间距(inter-page spacing)   UIPageViewController类似一个视图容器,其中每个具体的视图由各自的ViewController进行维护管理,UIPageViewController只进行协调与动画布置。下图可以很好的展现出UIPageViewControlelr的使用结构:   上图中,UIPageViewControllerDataSource协议为UIPageViewController提供数据支持,DataSource协议提供的数据来自各个ViewContoller自行维护,UIPageViewControllerDelegate中的回调可以对翻页动作,屏幕旋转动作等进行监听。UIPageViewController把从DataSource中获取到的视图数据渲染给View用于当前视图控制器的展示。   为了演示,我们会一起创建一个简单的app。当然,我们不会演示所有的UIPageViewController的配置细节,我们会演示到使用滑动翻页样式来创建一个引导页。不过别担心,有了对UIPageViewController的基本理解,我相信你能够去探索其他的特性。   开始吧!   二、创建一个UIPageViewController   首先新建一个类作为翻页视图控制器中具体每一页视图的控制器,使其继承于UIViewController:   ModelViewController.h   #import   @interface ModelViewController : UIViewController   +(ModelViewController *)creatWithIndex:(int)index;   @property(nonatomic,strong)UILabel * indexLabel;   @end   ModelViewController.m   #import "ModelViewController.h"   @interface ModelViewController ()   @end   @implementation ModelViewController   +(ModelViewController *)creatWithIndex:(int)index{   ModelViewController * con = [[ModelViewController alloc]init];   con.indexLabel = [[UILabel alloc]initWithFrame:CGRectMake(110, 200, 100, 30)];   con.indexLabel.text = [NSString stringWithFormat:@"第%d页",index];   [con.view addSubview:con.indexLabel];   return con;   }   - (void)viewDidLoad {   [super viewDidLoad];   // Do any additional setup after loading the view.   self.view.backgroundColor = [UIColor redColor];   }   @end   在工程模板自带的ViewController.m文件中实现如下代码:   #import "ViewController.h"   #import "ModelViewController.h"   //遵守协议   @interface ViewController ()   {   //翻页视图控制器对象   UIPageViewController * _pageViewControl;   //数据源数组   NSMutableArray * _dataArray;   }   @end   @implementation ViewController   - (void)viewDidLoad {   [super viewDidLoad];   //进行初始化   _pageViewControl = [[UIPageViewController alloc]initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:@{UIPageViewControllerOptionSpineLocationKey:@0,UIPageViewControllerOptionInterPageSpacingKey:@10}];   self.view.backgroundColor = [UIColor greenColor];   //设置翻页视图的尺寸   _pageViewControl.view.bounds=self.view.bounds;   //设置数据源与代理   _pageViewControl.dataSource=self;   _pageViewControl.delegate=self;   //创建初始界面   ModelViewController * model = [ModelViewController creatWithIndex:1];   //设置初始界面   [_pageViewControl setViewControllers:@[model] direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:nil];   //设置是否双面展示   _pageViewControl.doubleSided = NO;   _dataArray = [[NSMutableArray alloc]init];   [_dataArray addObject:model];   [self.view addSubview:_pageViewControl.view];   }   //翻页控制器进行向前翻页动作 这个数据源方法返回的视图控制器为要显示视图的视图控制器   - (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController{   int index = (int)[_dataArray indexOfObject:viewController];   if (index==0) {   return nil;   }else{   return _dataArray[index-1];   }   }   //翻页控制器进行向后翻页动作 这个数据源方法返回的视图控制器为要显示视图的视图控制器   - (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController{   int index = (int)[_dataArray indexOfObject:viewController];   if (index==9) {   return nil;   }else{   if (_dataArray.count-1>=(index+1)) {   return _dataArray[index+1];   }else{   ModelViewController * model = [ModelViewController creatWithIndex:index+2];   [_dataArray addObject:model];   return model;   }   }   }   //屏幕旋转触发的代理方法   - (UIPageViewControllerSpineLocation) pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation{   return UIPageViewControllerSpineLocationMin;   }   //设置分页控制器的分页数   - (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController {   return 10;   }   //设置初始的分页点   - (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController{   return 0;   }   @end   上面创建了最简单的翻页视图控制器示例,效果如下图:   三、UIPageViewController中方法使用解析   //创建翻页视图控制器对象   - (instancetype)initWithTransitionStyle:(UIPageViewControllerTransitionStyle)style navigationOrientation:(UIPageViewControllerNavigationOrientation)navigationOrientation options:(nullable NSDictionary*)options;   上面方法用于创建视图控制器对象,其中UIPageViewControllerTransitionStyle参数设置翻页控制器的风格,枚举如下:   typedef NS_ENUM(NSInteger, UIPageViewControllerTransitionStyle) {   UIPageViewControllerTransitionStylePageCurl = 0, //类似于书本翻页效果   UIPageViewControllerTransitionStyleScroll = 1 // 类似于ScrollView的滑动效果   };   如果设置为UIPageViewControllerTransitionStyleCurl,翻页效果如下图所示:   上面初始化方法中的UIPageViewControllerNavigationOrientation属性设置翻页的方向,枚举如下:   typedef NS_ENUM(NSInteger, UIPageViewControllerNavigationOrientation) {   UIPageViewControllerNavigationOrientationHorizontal = 0,//水平翻页   UIPageViewControllerNavigationOrientationVertical = 1//竖直翻页   };   options参数用于设置翻页视图控制器的配置字典,其可以设置的配置键值如下:   //这个键需要设置为UIPageViewControllerOptionSpineLocationKey枚举值对应的`NSNumber对象 设置翻页控制器的书轴 后面会介绍   NSString * const UIPageViewControllerOptionSpineLocationKey;   //这个键需要设置为NSNumber类型 设置每页视图的间距 用于滚动视图风格的   NSString * const UIPageViewControllerOptionInterPageSpacingKey;   下面是UIPageViewController的一些常用属性与方法:   //设置数据源   @property (nullable, nonatomic, weak) iddelegate;   //设置代理   @property (nullable, nonatomic, weak) iddataSource;   //获取翻页风格   @property (nonatomic, readonly) UIPageViewControllerTransitionStyle transitionStyle;   //获取翻页方向   @property (nonatomic, readonly) UIPageViewControllerNavigationOrientation navigationOrientation;   //获取书轴类型   @property (nonatomic, readonly) UIPageViewControllerSpineLocation spineLocation;   //设置是否双面显示   @property (nonatomic, getter=isDoubleSided) BOOL doubleSided;   //设置要显示的视图控制器   - (void)setViewControllers:(nullable NSArray*)viewControllers direction:(UIPageViewControllerNavigationDirection)direction animated:(BOOL)animated completion:(void (^ __nullable)(BOOL finished))completion;   上面只有spineLocation属性有些难于理解,其枚举如下:   typedef NS_ENUM(NSInteger, UIPageViewControllerSpineLocation) {   //对于SCrollView类型的滑动效果 没有书轴 会返回下面这个枚举值   UIPageViewControllerSpineLocationNone = 0,   //以左边或者上边为轴进行翻转 界面同一时间只显示一个View   UIPageViewControllerSpineLocationMin = 1,   //以中间为轴进行翻转 界面同时可以显示两个View   UIPageViewControllerSpineLocationMid = 2,   //以下边或者右边为轴进行翻转 界面同一时间只显示一个View   UIPageViewControllerSpineLocationMax = 3   };   将上面的示例代码修改几个地方如下:   - (void)viewDidLoad {   [super viewDidLoad];   // Do any additional setup after loading the view, typically from a nib.   _pageViewControl = [[UIPageViewController alloc]initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationVertical options:@{UIPageViewControllerOptionSpineLocationKey:@2,UIPageViewControllerOptionInterPageSpacingKey:@10}];   self.view.backgroundColor = [UIColor greenColor];   _pageViewControl.view.bounds=self.view.bounds;   _pageViewControl.dataSource=self;   _pageViewControl.delegate=self;   ModelViewController * model = [ModelViewController creatWithIndex:1];   ModelViewController * model2 = [ModelViewController creatWithIndex:2];   [_pageViewControl setViewControllers:@[model,model2] direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:nil];   _pageViewControl.doubleSided = YES;   _dataArray = [[NSMutableArray alloc]init];   [_dataArray addObject:model];   [self.view addSubview:_pageViewControl.view];   }   - (UIPageViewControllerSpineLocation) pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation{   return UIPageViewControllerSpineLocationMid;   }   运行效果如下图所示:   四、UIPageViewControllerDataSource中方法解析   //向前翻页展示的ViewController   - (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController;   //向后翻页展示的ViewController   - (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController;   //设置分页控制器的分页点数   - (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController NS_AVAILABLE_IOS(6_0);   //设置当前分页控制器所高亮的点   - (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController NS_AVAILABLE_IOS(6_0);   五、UIPageViewControllerDelegate中方法解析   //翻页视图控制器将要翻页时执行的方法   - (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray*)pendingViewControllers NS_AVAILABLE_IOS(6_0);   //翻页动画执行完成后回调的方法   - (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray*)previousViewControllers transitionCompleted:(BOOL)completed;   //屏幕防线改变时回到的方法,可以通过返回值重设书轴类型枚举   - (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation;
2023-08-18 14:06:431

如何利用FluentMigrator实现数据库迁移

FluentMigratorFluent Migrator是一个基于.NET的迁移框架,你可以像使用Ruby on Rails Migrations一样使用它。Fluent Migrator的最新版本是3.13版,官网地址https://github.com/fluentmigrator/fluentmigrator。 你可以使用C#编写数据库迁移类,而不需要编写任何SQL脚本。从使用方式上看,它非常像EF/EF Core的数据库迁移脚本,但是它支持的数据库类型比EF/EF Core多的多,且不受限与EF/EF Core。支持的数据库列表 Microsoft SQL Server 2017 Microsoft SQL Server 2016 Microsoft SQL Server 2014 Microsoft SQL Server 2008 Microsoft SQL Server 2005 Microsoft SQL Server 2000 Microsoft SQL Server Compact Edition PostgreSQL MySQL 4 MySQL 5 Oracle Oracle (managed ADO.NET) Oracle (DotConnect ADO.NET) Microsoft JET Engine (Access) SQLite Firebird Amazon Redshift SAP Hana SAP SQL Anywhere DB2 DB2 iSeriesFluent Migrator提供了5个不同的类库来支持不同的场景。 Package 描述 FluentMigrator 创建数据库所需的基础程序集 FluentMigrator.Runner 进程内执行数据库迁移所需的程序集 FluentMigrator.Console 进程外执行数据库迁移所需的程序集,它兼容.NET 4.0/4.5/.NET Core 2.0 FluentMigrator.MSBuild 兼容.NET 4.0/4.5/.NET Standard 2.0的MSBuild任务 FluentMigrator.DotNet.Cli 可执行数据库迁移的.NET Core CLI工具入门例子这里我们首先演示一个最简单的数据库迁移例子,为一个MySql数据库添加一个日志表。创建控制台程序我们使用.NET Core CLI创建一个.NET Core的命令行程序。# 迁移脚本基础库dotnet add package FluentMigrator# 迁移脚本运行库dotnet add package FluentMigrator.Runner# 针对MySQL的迁移脚本支持库dotnet add package FluentMigrator.Runner.MySQL# ADO.NET针对MySQL的驱动器dotnet add package MySQL.Data添加第一个数据库迁移类未了创建一个名为Log的表,这里需要创建一个数据库迁移类 Log表中有2个字段,一个是Id字段,一个是Text字段 Id字段是Int64类型的主键,且自增 Text字段是字符串字段using FluentMigrator;namespace test{ [Migration(20180430121800)] public class AddLogTable : Migration { public override void Up() { Create.Table("Log") .WithColumn("Id").AsInt64().PrimaryKey().Identity() .WithColumn("Text").AsString(); } public override void Down() { Delete.Table("Log"); } }}运行迁移类编写完迁移类之后,我们就可以开始运行迁移类了。Fluent Migrator有两种运行迁移脚本的方式。 使用进程内执行器(推荐) 使用进程外执行器使用进程内执行器所谓的进行内执行器,其实就是借助FluentMigrator.Runner库,在程序内部手动调用IMigrationRunner接口对象的MigrateUp方法执行数据库迁移。这里我们可以修改Program.cs文件如下。 class Program { static void Main(string[] args) { var serviceProvider = CreateServices(); using (var scope = serviceProvider.CreateScope()) { UpdateDatabase(scope.ServiceProvider); } } private static IServiceProvider CreateServices() { return new ServiceCollection() //添加FluentMigrator基础服务 .AddFluentMigratorCore() .ConfigureRunner(rb => rb //添加MySql 5.0支持 .AddMySql5() //配置连接字符串 .WithGlobalConnectionString("server=localhost;port=3307;Database=abc;UID=root;PWD=123456") //检索迁移配置 .ScanIn(typeof(AddLogTable).Assembly).For.Migrations()) //启用控制台日志 .AddLogging(lb => lb.AddFluentMigratorConsole()) //构建服务提供器 .BuildServiceProvider(false); } private static void UpdateDatabase(IServiceProvider serviceProvider) { //初始化进程内迁移构建器 var runner = serviceProvider.GetRequiredService<IMigrationRunner>(); //执行迁移脚本 runner.MigrateUp(); } }启动程序之后,迁移自动完成。使用进程外执行器如果你想使用进行外迁移执行器,这里首先需要保证你已经安装了.NET Core 2.1或以上版本的SDK, 因为你需要使用.NET Core 2.1之后新增的Global Tool功能。这里我们可以使用命令行,添加FluentMigrator.DotNet.Cli这个工具dotnet tool install -g FluentMigrator.DotNet.Cli安装完成之后,我们就可以使用这个工具来做数据库迁移了dotnet fm migrate -p mysql -c "server=localhost;port=3307;Database=abc;UID=root;PWD=123456" -a ".inDebug etcoreapp2.1 est.dll"这个方法有3个参数, 第一个参数-p指定了数据库的类型,第二个参数-c指定了连接字符串,第三个参数-a指定了包含迁移类的程序集路径。注意:其实这里还有第四个参数command, 可选值为down/up, 如果不指定,默认是up, 即运行所有还未运行过的数据库迁移类。方法执行后,效果和进程内执行器的效果一致。基本概念在展示了一个简单示例之后,我们接下来看一下Fluent Migrator中的一些基本概念。迁移(Migrations)Fluent Migrator中最基础的元素是迁移类,每个迁移类都需要继承自一个名为Migration的抽象类,并实现两个抽象方法Up和Down, 顾名思义Up方法即执行当前的数据库变更,Down方法即回滚当前的数据库变更。[Migration(1)]public class CreateUserTable : Migration{ public override void Up() { Create.Table("Users"); } public override void Down() { Delete.Table("Users"); }}这里你可能注意到迁移类的头部,有一个Migration的特性,它的值是1, 这里其实是指定了迁移类执行的顺序,编号越小的迁移类越先执行(有一部分开发人员系统会使用当前日期的yyyyMMddHHmmss格式来标记迁移类),这个编号必须是唯一的,不能重复。Fluent接口(Fluent Interface)Fluent Migrator提供非常丰富的fluent api, 我们可以使用这些api来创建表,列,索引。 基本上你能用到的大部分场景它都支持。创建表达式(Create Expression)你可以使用它创建表达式来添加表,列,索引,外键,组织结构(schema)Create.Table("Users") .WithIdColumn() .WithColumn("Name").AsString().NotNullable();注:WithIdColumn()是一个扩展方法,它等价于.WithColumn("Id").AsInt32().NotNullable().PrimaryKey().Identity();Create.ForeignKey() .FromTable("Users").ForeignColumn("CompanyId") .ToTable("Company").PrimaryColumn("Id");变更表达式(Alter Expression)用来变更已存在的表和列Alter.Table("Bar") .AddColumn("SomeDate") .AsDateTime() .Nullable();Alter.Table("Bar") .AlterColumn("SomeDate") .AsDateTime() .NotNullable();Alter.Column("SomeDate") .OnTable("Bar") .AsDateTime() .NotNullable();删除表达式(Delete Expression)用来删除表,列,外键,组织结构(Schema)Delete.Table("Users");删除多个列(Delete Multiple Columns)Fluent Migrator也提供了一个删除多列的语法Delete.Column("AllowSubscription").Column("SubscriptionDate").FromTable("Users");执行脚本(Execute Expression)允许你执行自定义的SQL脚本或执行指定的SQL脚本文件Execute.Script("myscript.sql");Execute.EmbeddedScript("UpdateLegacySP.sql");Execute.Sql("DELETE TABLE Users");这里EmbeddedScript方法也是执行指定的SQL脚本文件,但是它的文件来源Embbed Resource中读取。如果你想使用EmbbedScript只需要将指定的SQL脚本文件的Build Action属性设置为Embbed Resource即可。重命名表达式(Rename Expression)允许重命名表或列Rename.Table("Users").To("UsersNew");Rename.Column("LastName").OnTable("Users").To("Surname");数据操作表达式(Data Expressions)允许对数据库数据进行新增/修改/删除操作Insert.IntoTable("Users").Row(new { FirstName = "John", LastName = "Smith" });Delete.FromTable("Users").AllRows(); //删除所有行Delete.FromTable("Users").Row(new { FirstName = "John" }); //删除所有FirstName = John的数据行Delete.FromTable("Users").IsNull("Username"); //删除所有Username为空的数据行Update.Table("Users").Set(new { Name = "John" }).Where(new { Name = "Johnanna" });数据库类型判断表达式(IfDatabase Expression)允许根据数据库类型,执行不同的数据库迁移操作IfDatabase("SqlServer", "Postgres") .Create.Table("Users") .WithIdColumn() .WithColumn("Name").AsString().NotNullable();IfDatabase("Sqlite") .Create.Table("Users") .WithColumn("Id").AsInt16().PrimaryKey() .WithColumn("Name").AsString().NotNullable();组织结构存在表达式(Schema.Exists Expressions)用来判断组织结构是否已经存在,列如判断表是否存在,列是否存在等等。if (!Schema.Table("Users").Column("FirstName").Exists()){ this.Create.Column("FirstName").OnTable("Users").AsAnsiString(128).Nullable();}配置(Profile)Fluent Migrator还提供了一个Profile的特性,使用该配置,开发人员可以对针对的不同的环境(开发环境,测试环境,生产环境等)运行不同的脚本。[Profile("Development")]public class CreateDevSeedData : Migration{ public override void Up() { Insert.IntoTable( "User" ).Row( new { Username = "devuser1", DisplayName = "Dev User" }); } public override void Down() { //empty, not using }}和EF/EF Core的脚本迁移比较Fluent Migrator的数据库脚本迁移与EF/EF Core非常类似。相似点: 当我们使用EF/EF Core做数据库迁移的时候,会在当前数据库中创建一个__EFMigrationsHistory表,并在其中保存运行过的脚本Id。 当我们使用Fluent Migrator做数据库迁移的时候,也会在数据库中创建一个VersionInfo表,并在其中保存运行过的脚本Id区别: EF/EF Core的迁移脚本是根据EF上下文配置以及最新的ModelSnapshot自动生成的,更方便一些。Fluent Migrator的迁移脚本,都需要自己手动编写, 更灵活一些。 EF/EF Core每次自动生成的迁移文件一个cs文件一个Design.cs文件,每个cs文件中包含了自动生成的脚本类,Design.cs里面包含了针对当前迁移类的最新ModelSnapshot, 所以重度使用EF/EF Core, 最后累计生成的Design.cs文件都会非常大。Fluent Migrator的每个迁移类都是自己编写的,只包含本次迁移的内容,所以体积更小。总结本篇中我描述了Fluent Migrator的一些基本用法,以及它与EF/EF Core脚本迁移的区别, 如果你不是重度EF/EF Core的使用者,可以尝试一下使用Fluent Migrator来做数据库迁移。好了,
2023-08-18 14:06:541

认识C#中使用Nullable类型[1]

  在C# x的版本中 一个值类型变量是不可以被赋予null值的 否则会产生异常 在C# 中 微软提供了Nullable类型 允许用它定义包含null值(即空值)的数据类型 这对处理数据库中包含可选字段以及很多方面都有很大帮助    定义Nullable类型   定义一个nullable类型非常类似于定义一个非nullable类型 不同之处在于使用类型修饰符 ? 比如定义一个整型如下   int myInt = ;要使一个整型变量可以存储一个null值 可以如下声明   int? myNullableInt = ;这两个变量看起来似乎是一样的 但事实并非如此 实际上 Nullable类型是一个结构体 它有两个公开可读字段 HasValue和Value HasValue是一个布尔值 当有值存储时它为真 当变量值为null时HasValue为假 当HavValue为真是时 可以取得变量的值 为假时 当尝试取得变量的值时会抛出一个异常   现在null是C#的一个关键字 它可以被赋给一个Nullable型变量 下面是对Nullable型变量赋值的两种有效方式   double? myDouble = ;double? myOtherDouble = null;可以看到 myDouble被赋给一个值 它也可以被赋以null 在第二个语句中 myOtherDouble被初始化为null——在一个非Nullable型变量中这样做会产生异常   使用nullable类型 一个Nullable型变量可以像一般值类型那样使用 在编译过程中Nullable型变量和非Nullable型变量会进行隐式田转换 就是说我们可以把一个标准整型赋给一个整型Nullable变量 反之亦然 参考下面示例代码  int? nFirst = null;   int Second = ;   nFirst = Second;   // 可以   nFirst = ;   // 可以   Second = nFirst;   //也可以 因为此时nFirst== nFirst = null;   // 可以   Second = nFirst;   // 抛出异常 Second 是一个非nullable型变量   可以看到 只要一个Nullable型变量的值不是null 它就可以和一个非Nullable型变量交换变量的值 如果包含null值   就会抛出异常 为避免异常发生 可以利用Nullable型变量的HasValue属性 if (nFirst HasValue) Second = nFirst;   如上所示 如果nFirst 含有一个值 这个赋值语句就会运行 否则 就会跳过   在Nullable值中使用操作符 Lifed Operators【 】 两个相同类型的Nullable型和非Nullable型变量除了可以相互自动转化之外 还可以通过操作符在它们中进行操作 参考下面代码   lishixinzhi/Article/program/net/201311/14979
2023-08-18 14:07:251

为什么不能import javax.annotation.Nullable;

1、myeclipse导入项目中出现Multiple markers at this line这种错误,解决办法:把项目右键->build path->configure build path->java Compiler(左边那排中) ->在右边的Compiler compliance level 修改版本为本myeclipse的jdk的版本,例如我的myeclipse的jdk版本1.6,就可以解决了。2、myeclipse导入项目 JSP页面会出现Multiple annotations found at this line这个错误,解决办法:点击导航栏window-->preference-->MyEclipse-->Valdation-->将Manual和Build下复选框全部取消选择。3、导入项目后出现项目上有红色×,解决办法:(1)假如problem中有错误,就 找出problem中的问题,然后删除(原因:虽然不是项目内部的错误,而且不会出错,但是导入的项目不会自动的改正,所以手动删除就可。)4、eclipse中刚从服务器中导出工程:出现Multiple markers at this line- The import org.springframework cannot beresolved- The import org.springframework cannot beresolved的问题。eclipse中刚从服务器中导出工程:出现问题 4 的问题,报错的原因可能是:jdk版本不一致。eclipse的版本默认的是1.7,而我用的是1.8,所以我的jre也是1.8,而1.8 的jre和eclipse的1.7不对应。所以我有下载了一个jdk,重新安装,引用就解决了。(安装了两个jdk,用到哪一个就在高级变量里配置哪一个,
2023-08-18 14:07:322

怎样将int类型赋值为空

可空类型表示可被赋值为 null 值的值类型变量。无法创建基于引用类型的可空类型。(引用类型已支持 null 值。)。语法 T? 是 System.Nullable<T> 的简写,此处的 T 为值类型。这两种形式可以互换。为可空类型赋值与为一般值类型赋值的方法相同,如 int? x = 10; 或 double? d = 4.108;。如果基础类型的值为 null,请使用 System.Nullable.GetValueOrDefault 属性返回该基础类型所赋的值或默认值,例如 int j = x.GetValueOrDefault();请使用 HasValue 和 Value 只读属性测试是否为空和检索值,例如 if(x.HasValue) j = x.Value;如果此变量包含值,则 HasValue 属性返回 True;或者,如果此变量的值为空,则返回 False。如果已赋值,则 Value 属性返回该值,否则将引发 System.InvalidOperationException。可空类型变量的默认值将 HasValue 设置为 false。未定义 Value。使用 ?? 运算符分配默认值,当前值为空的可空类型被赋值给非空类型时将应用该默认值,如 int? x = null; int y = x ?? -1;。不允许使用嵌套的可空类型。将不编译下面一行:Nullable<Nullable<int>> n
2023-08-18 14:07:581

key元素是什么

以存储架构定义语言 (SSDL) 表示的 Key 元素表示基础数据库中某个表的主键。Key 是 EntityType 元素的一个子元素,表示表中的一行。主键是通过引用在 EntityType 元素上定义的一个或多个 Property 元素在 Key 元素中定义的。Key 元素可以具有以下子元素(按所列顺序):PropertyRef(一个或多个)批注元素没有适用于 Key 元素的特性。示例下面的示例演示具有引用一个属性的键的 EntityType 元素:XML复制<EntityType Name="Customers"> <Documentation> <Summary>Summary here.</Summary> <LongDescription>Long description here.</LongDescription> </Documentation> <Key> <PropertyRef Name="CustomerId" /> </Key> <Property Name="CustomerId" Type="int" Nullable="false" /> <Property Name="Name" Type="nvarchar(max)" Nullable="false" /></EntityType>复制<EntityType Name="Customers"> <Documentation> <Summary>Summary here.</Summary> <LongDescription>Long description here.</LongDescription> </Documentation> <Key> <PropertyRef Name="CustomerId" /> </Key> <Property Name="CustomerId" Type="int" Nullable="false" /> <Property Name="Name" Type="nvarchar(max)" Nullable="false" /></EntityType><EntityType Name="Customers"> <Documentation> <Summary>Summary here.</Summary> <LongDescription>Long description here.</LongDescription> </Documentation> <Key> <PropertyRef Name="CustomerId" /> </Key> <Property Name="CustomerId" Type="int" Nullable="false" /> <Property Name="Name" Type="nvarchar(max)" Nullable="false" /></EntityType>
2023-08-18 14:08:061

Oracle ORA-01451: 要修改为 NULL 的列无法修改为 NULL,是什么原因?

可能是主键包含该列字段,主键不能为空,把该字段从主键移除即可
2023-08-18 14:08:172

Oracle ORA-01451: 要修改为 NULL 的列无法修改为 NULL,是什么原因

产生此错误的原因是Oracle中不允许将NULL字段修改为NULL字段。如果要修改可在之前判断一下,然后再修改,给出样例代码如下:declarevisnull varchar2(4);beginselect nullableinto visnullfrom user_tab_columnswhere table_name = upper("tblStockInspect")and column_name = upper("FDepartID");if visnull = "N" thenexecute immediate "alter table tblStockInspect modify FDepartID int null";end if;end;
2023-08-18 14:08:271

在方法参数里有问号,是什么意思?

Nullable类型,用“C# Nullable”在百度搜索一下了解更多信息。
2023-08-18 14:08:342

在c++中可以为int类型赋空值吗?怎么赋呢?

可空类型表示可被赋值为 null 值的值类型变量。无法创建基于引用类型的可空类型。(引用类型已支持 null 值。)。语法 T? 是 System.Nullable<T> 的简写,此处的 T 为值类型。这两种形式可以互换。为可空类型赋值与为一般值类型赋值的方法相同,如 int? x = 10; 或 double? d = 4.108;。如果基础类型的值为 null,请使用 System.Nullable.GetValueOrDefault 属性返回该基础类型所赋的值或默认值,例如 int j = x.GetValueOrDefault();请使用 HasValue 和 Value 只读属性测试是否为空和检索值,例如 if(x.HasValue) j = x.Value;如果此变量包含值,则 HasValue 属性返回 True;或者,如果此变量的值为空,则返回 False。如果已赋值,则 Value 属性返回该值,否则将引发 System.InvalidOperationException。可空类型变量的默认值将 HasValue 设置为 false。未定义 Value。使用 ?? 运算符分配默认值,当前值为空的可空类型被赋值给非空类型时将应用该默认值,如 int? x = null; int y = x ?? -1;。不允许使用嵌套的可空类型。将不编译下面一行:Nullable<Nullable<int>> n
2023-08-18 14:08:557

如果int 类型没赋值,怎么它为空?

判断INT类型是否被赋值,有这么几个办法方法一:int a = int.MinValue;if (a == int.MinValue) { //没有赋值 }方法二: int? b = null; if (b == null) { //没有赋值 }方法三: System.Nullable<int> c=new System.Nullable<int>(); c=null; if(c==null) { //没有赋值 }
2023-08-18 14:09:513

Mysql5.1中,datetime类型的字段为什么插入不了NULL值

Datetime是struct,值类型,值类型是不能为null的.只有Datetime的泛型表达DateTime?类型可以赋值为null,但这只是一种简写,DateTime?的实际类型为Nullable.所有值类型都可以转换为这种形式来赋值为null.
2023-08-18 14:09:591

C# 可空类型 float? f = null ; float? _f = new float?(); 同上一语句有什么区别?

使用可以为空的float类型float?float?[] arr = new float?[5]; arr[0] = 1.0F; arr[1] = 2.0f; arr[2] = null; arr[3] = 3.4f; arr[4] = 4.5f; for (int i = 0; i < arr.Length; i++) { if (arr == null) { Console.WriteLine("###"); } else { Console.WriteLine(arr[i]); } }
2023-08-18 14:10:072

MySql.Data.Types.MySqlDateTime”的对象无法转换为类型“System.Nullable`1[System.DateTim

不知道你们的问题解决了吗,但是如果以后有搜索到该问题的,请参考网页链接这个
2023-08-18 14:10:154

如何为DateTime类型赋Null值!!

你是不是把一个字段设置为DateTime类型 然后把这个字段允许为空就可以了呀 不太懂你要说什么
2023-08-18 14:10:415

javascript中如何获得TABLE中某一行指定列的值,并触发一个事件,修改该行另外一列的值?

<table id="1"><tr ><td nowrap="true">删除</td><td nowrap="true">产品</td><td nowrap="true">折扣</td><td nowrap="true">优惠价</td><td nowrap="true">数量</td><td nowrap="true">总金额</td><td nowrap="true">备注</td></tr><tr type="data"><td nowrap="true"><span><input type="text" name="PRODID" value="" nullable="0" itemdesc="产品" /></td><td nowrap="true"><span><input type="text" name="DISCOUNT" value="" nullable="0" itemdesc="折扣" /></td><td nowrap="true"><span><input type="text" name="PRICE" value="" nullable="0" itemdesc="优惠价" onkeydown="getTotalPrice()" /></td><td nowrap="true"><span><input type="text" name="COUNT" value="" itemdesc="数量" onkeydown="getTotalPrice()"/></span></td><td nowrap="true"><span><input type="text" name="TOTALPRICE" value="" itemdesc="总金额"/></td></tr></table><table width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td><input id="1" class="button" type="button" value="增加" onclick="。。。。"></td><tr></table><script type="text/javascript"> function getTotalPrice() { var items = document.getElementsByTagName("input"); if (items[2].value != "" && items[3].value != "") { items[4].value = items[2].value * items[3].value; } } </script> <!--楼上让人汗颜-->
2023-08-18 14:11:072

Hibernate用注释进行映射。老是提示User is not mapped. 请问应怎样解决?

已经有人回答 greatdoudou
2023-08-18 14:11:292

spark sql 怎样处理日期类型

json File 日期类型 怎样处理?怎样从字符型,转换为Date或DateTime类型?json文件如下,有字符格式的日期类型```{ "name" : "Andy", "age" : 30, "time" :"2015-03-03T08:25:55.769Z"}{ "name" : "Justin", "age" : 19, "time" : "2015-04-04T08:25:55.769Z" }{ "name" : "pan", "age" : 49, "time" : "2015-05-05T08:25:55.769Z" }{ "name" : "penny", "age" : 29, "time" : "2015-05-05T08:25:55.769Z" }```默认推测的Schema:```root|-- _corrupt_record: string (nullable = true)|-- age: long (nullable = true)|-- name: string (nullable = true)|-- time200: string (nullable = true)```测试代码```val fileName = "person.json"val sc = SparkUtils.getScLocal("json file 测试")val sqlContext = new org.apache.spark.sql.SQLContext(sc)val jsonFile = sqlContext.read.json(fileName)jsonFile.printSchema()```##解决方案### 方案一、json数据 时间为 long 秒或毫秒### 方案二、自定义schema```val fileName = "person.json"val sc = SparkUtils.getScLocal("json file 测试")val sqlContext = new org.apache.spark.sql.SQLContext(sc)val schema: StructType = StructType(mutable.ArraySeq(StructField("name", StringType, true),StructField("age", StringType, true),StructField("time", TimestampType, true)));val jsonFile = sqlContext.read.schema(schema).json(fileName)jsonFile.printSchema()jsonFile.registerTempTable("person")val now: Timestamp = new Timestamp(System.currentTimeMillis())val teenagers = sqlContext.sql("SELECT * FROM person WHERE age >= 20 AND age <= 30 AND time <=‘" +now+"‘")teenagers.foreach(println)val dataFrame = sqlContext.sql("SELECT * FROM person WHERE age >= 20 AND age <= 30 AND time <=‘2015-03-03 16:25:55.769‘")dataFrame.foreach(println)```###方案三、sql建表 创建表sql```CREATE TEMPORARY TABLE person IF NOT EXISTS [(age: long ,name:string ,time:Timestamp)] USING org.apache.spark.sql.jsonOPTIONS ( path ‘person.json‘)语法CREATE [TEMPORARY] TABLE [IF NOT EXISTS][(col-name data-type [, …])]USING [OPTIONS ...][AS ]```### 方案四、用textfile convert
2023-08-18 14:11:381

Hibernate中查询报错,数据库为mysql

hibernate 是面向对象的语言,可以用select * from 表 吗。。。
2023-08-18 14:12:004

在C#中,如何将double[]转换为double?[]?

哦,用double?[]=Nullable<double[]>;
2023-08-18 14:12:092

sparkdataframe转换成字节流

本文介绍基于Spark(2.0+)的Json字符串和DataFrame相互转换。json字符串转DataFramespark提供了将json字符串解析为DF的接口,如果不指定生成的DF的schema,默认spark会先扫码一遍给的json字符串,然后推断生成DF的schema:* 若列数据全为null会用String类型* 整数默认会用Long类型* 浮点数默认会用Double类型 val json1 = """{"a":null, "b": 23.1, "c": 1}""" val json2 ="""{"a":null, "b": "hello", "d": 1.2}""" val ds =spark.createDataset(Seq(json1, json2))val df = spark.read.json(ds) df.showdf.printSchema +----+-----+----+----+ | a| b| c| d| +----+-----+----+----+ |null|23.1| 1|null| |null|hello|null| 1.2| +----+-----+----+----+ root |-- a: string(nullable =true) |-- b: string (nullable = true) |-- c: long (nullable = true)|-- d: double (nullable =true)若指定schema会按照schema生成DF:* schema中不存在的列会被忽略* 可以用两种方法指定schema,StructType和String,具体对应关系看后面*若数据无法匹配schema中类型:若schema中列允许为null会转为null;若不允许为null会转为相应类型的空值(如Double类型为0.0值),若无法转换为值会抛出异常val schema = StructType(List( StructField("a", ByteType, true), StructField("b", FloatType,false), StructField("c", ShortType, true) )) //或 val schema = "bfloat, c short" val df = spark.read.schema(schema).json(ds) df.showdf.printSchema +----+----+----+ | a| b| c| +----+----+----+ |null|23.1| 1| |null|0|null| +----+----+----+ root |-- a: byte (nullable = true) |-- b: float(nullable =true) |-- c: short (nullable = true)json解析相关配置参数primitivesAsString (default false): 把所有列看作string类型prefersDecimal(default false): 将小数看作decimal,如果不匹配decimal,就看做doubles.allowComments (default false): 忽略json字符串中Java/C++风格的注释allowUnquotedFieldNames (default false): 允许不加引号的列名allowSingleQuotes (default true): 除双引号外,还允许用单引号allowNumericLeadingZeros (default false): 允许数字中额外的前导0(如0012)allowBackslashEscapingAnyCharacter (default false): 允许反斜杠机制接受所有字符allowUnquotedControlChars (default false):允许JSON字符串包含未加引号的控制字符(值小于32的ASCII字符,包括制表符和换行字符)。mode (default PERMISSIVE): 允许在解析期间处理损坏记录的模式。PERMISSIVE:当遇到损坏的记录时,将其他字段设置为null,并将格式错误的字符串放入由columnNameOfCorruptRecord配置的字段中。若指定schema,在schema中设置名为columnNameOfCorruptRecord的字符串类型字段。如果schema中不具有该字段,则会在分析过程中删除损坏的记录。若不指定schema(推断模式),它会在输出模式中隐式添加一个columnNameOfCorruptRecord字段。DROPMALFORMED : 忽略整条损害记录FAILFAST : 遇到损坏记录throws an exceptioncolumnNameOfCorruptRecord(默认值为spark.sql.columnNameOfCorruptRecord的值):允许PERMISSIVEmode添加的新字段,会重写spark.sql.columnNameOfCorruptRecorddateFormat (default yyyy-MM-dd): 自定义日期格式,遵循java.text.SimpleDateFormat格式.只有日期部分(无详细时间)timestampFormat (default yyyy-MM-dd"T"HH:mm:ss.SSSXXX):自定义日期格式,遵循java.text.SimpleDateFormat格式. 可以有详细时间部分(到微秒)multiLine (default false): 解析一个记录,该记录可能跨越多行,每个文件以上参数可用option方法配置:val stringDF = spark.read.option("primitivesAsString", "true").json(ds)stringDF.show stringDF.printSchema +----+-----+----+----+ | a| b| c| d|+----+-----+----+----+ |null| 23.1| 1|null| |null|hello|null| 1.2|+----+-----+----+----+ root |-- a: string (nullable =true) |-- b: string(nullable =true) |-- c: string (nullable = true) |-- d: string (nullable = true)二进制类型会自动用base64编码方式表示‘Man"(ascci) base64编码后为:”TWFu”val byteArr = Array("M".toByte, "a".toByte, "n".toByte) val binaryDs =spark.createDataset(Seq(byteArr))val dsWithB64 = binaryDs.withColumn("b64",base64(col("value"))) dsWithB64.show(false) dsWithB64.printSchema+----------+----+ |value |b64 | +----------+----+ |[4D 61 6E]|TWFu|+----------+----+ root |-- value: binary (nullable =true) |-- b64: string(nullable =true) //=================================================dsWithB64.toJSON.show(false) +-----------------------------+ |value |+-----------------------------+ |{"value":"TWFu","b64":"TWFu"}|+-----------------------------+//================================================= val json ="""{"value":"TWFu"}""" val jsonDs = spark.createDataset(Seq(json)) val binaryDF= spark.read.schema("value binary").json(jsonDs ) binaryDF.showbinaryDF.printSchema +----------+ | value| +----------+ |[4D 61 6E]|+----------+ root |-- value: binary (nullable =true)指定schema示例:以下是Spark SQL支持的所有基本类型:val json = """{"stringc":"abc", "shortc":1, "integerc":null, "longc":3,"floatc":4.5, "doublec":6.7, "decimalc":8.90, "booleanc":true, "bytec":23,"binaryc":"TWFu", "datec":"2010-01-01", "timestampc":"2012-12-1211:22:22.123123"}""" val ds = spark.createDataset(Seq(json)) val schema ="stringc string, shortc short, integerc int, longc long, floatc float, doublecdouble, decimalc decimal(10, 3), booleanc boolean, bytec byte, binaryc binary,datec date, timestampc timestamp" val df = spark.read.schema(schema).json(ds)df.show(false) df.printSchema+-------+------+--------+-----+------+-------+--------+--------+-----+----------+----------+-----------------------+|stringc|shortc|integerc|longc|floatc|doublec|decimalc|booleanc|bytec|binaryc|datec |timestampc |+-------+------+--------+-----+------+-------+--------+--------+-----+----------+----------+-----------------------+|abc |1 |null |3 |4.5 |6.7 |8.900 |true |23 |[4D 61 6E]|2010-01-01|2012-12-12 11:22:22.123|+-------+------+--------+-----+------+-------+--------+--------+-----+----------+----------+-----------------------+root |-- stringc: string (nullable =true) |-- shortc: short (nullable = true)|-- integerc: integer (nullable =true) |-- longc: long (nullable = true) |--floatc: float (nullable =true) |-- doublec: double (nullable = true) |--decimalc: decimal(10,3) (nullable = true) |-- booleanc: boolean (nullable = true) |-- bytec: byte (nullable =true) |-- binaryc: binary (nullable = true) |--datec: date (nullable =true) |-- timestampc: timestamp (nullable = true)复合类型:val json = """ { "arrayc" : [ 1, 2, 3 ], "structc" : { "strc" : "efg","decimalc" : 1.1 }, "mapc" : { "key1" : 1.2, "key2" : 1.1 } } """ val ds =spark.createDataset(Seq(json))val schema = "arrayc array, structcstruct, mapc map" val df =spark.read.schema(schema).json(ds) df.show(false) df.printSchema+---------+--------+--------------------------+ |arrayc |structc |mapc |+---------+--------+--------------------------+ |[1, 2, 3]|[efg, 1]|[key1 -> 1.2, key2 ->1.1]| +---------+--------+--------------------------+ root |-- arrayc:array (nullable =true) | |-- element: short (containsNull = true) |-- structc:struct (nullable =true) | |-- strc: string (nullable = true) | |-- decimalc:decimal(10,0) (nullable = true) |-- mapc: map (nullable = true) | |-- key:string | |-- value: float (valueContainsNull =true)SparkSQL数据类型基本类型:DataType simpleString typeName sql defaultSize catalogString jsonStringType string string STRING 20 string “string”ShortType smallint short SMALLINT 2 smallint “short”IntegerType int integer INT 4 int “integer”LongType bigint long BIGINT 8 bigint “long”FloatType float float FLOAT 4 float “float”DoubleType double double DOUBLE 8 double “double”DecimalType(10,3) decimal(10,3) decimal(10,3) DECIMAL(10,3) 8 decimal(10,3)“decimal(10,3)”BooleanType boolean boolean BOOLEAN 1 boolean “boolean”ByteType tinyint byte TINYINT 1 tinyint “byte”BinaryType binary binary BINARY 100 binary “binary”DateType date date DATE 4 date “date”TimestampType timestamp timestamp TIMESTAMP 8 timestamp “timestamp”三个复合类型:DataType simpleString typeName sql defaultSize catalogString jsonArrayType(IntegerType, true) array array ARRAY 4 array{“type”:”array”,”elementType”:”integer”,”containsNull”:true}MapType(StringType, LongType, true) map map MAP28 map{“type”:”map”,”keyType”:”string”,”valueType”:”long”,”valueContainsNull”:true}StructType(StructField(“sf”, DoubleType)::Nil) struct structSTRUCT 8 struct{“type”:”struct”,”fields”:[{“name”:”sf”,”type”:”double”,”nullable”:true,”metadata”:{}回答于 2022-11-17抢首赞查看全部7个回答IO分类:按照数据流向分类:输入流输出流按照处理的单位划分:字节流:字节流读取的都是文件中的二进制数据,读取到的二进制数据不会经过任何处理字符流:字符流读取的数据都是以字符为单位的,字符流也是读取的文件的二进制数据,只不过会把这些二进制数据转换成我们能识别的字符字符流 = 字节流 + 解码输出字节流::------------------|OutputStream 所有输出字节流的基类 抽象类-----------|FileOutputStream 向文件输出数据的输出字节流 throws FileNotFoundExceptionFileOutputStream的使用步骤:1.找到目标文件2.建立数据通道3.把数据转换成字节数组写出4.关闭资源FileOutputStream的一些方法:close() 关闭此文件输出流并释放与此流有关的所有系统资源。write(int b) 将指定字节写入此文件输出流。write(byte[] b)   将 b.length 个字节从指定 byte 数组写入此文件输出流中。write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。注意:1.write(byte b[])方法实际上是调用了 write(byte b[], int off, int len)方法FileOutputStream要注意的细节:1.使用FileOutputStream的时候,如果目标文件不存在,那么会创建目标文件对象,然后把数据写入2.使用FileOutputStream的时候,如果目标文件已经存在,那么会清空目标文件的数据后再写入数据,如果需要再原数据的上追加数据,需要使用FileOutputStream(file,true)构造函数3.使用FileOutputStream的write方法写数据的时候,虽然接受的是一个int类型的数据,但真正写出的只是一个字节的数据,只是把低八位的二进制数据写出,其他二十四位数据全部丢弃复制代码public class Demo2 {public static void main(String[] args) {//1.找到目标文件File file = new File("D:\新建文件夹 (2)\a.txt");System.out.println("文件的源文数据是:"+readFile(file));writeFile(file,"Hello World!");System.out.println("目前文件数据是:"+readFile(file));}//输出数据public static void writeFile(File file,String data) {FileOutputStream fileOutputStream = null;try{//2.建立通道(我的源文件数据:abc 追加数据)fileOutputStream = new FileOutputStream(file,true);//3.把要写入的数据转换成字符数组fileOutputStream.write(data.getBytes());}catch(IOException e) {throw new RuntimeException(e);}finally {//关闭资源try {fileOutputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}}//输入数据public static String readFile(File file) {FileInputStream fileInputStream = null;String str = "";try {//建立数据通道fileInputStream = new FileInputStream(file);//创建缓冲字节数组byte[] buf = new byte[1024];int length = 0;while((length = fileInputStream.read(buf))!=-1) {//把字节数组转换成字符串返回str+=new String(buf,0,length);}} catch (IOException e) {throw new RuntimeException();}finally {try {fileInputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}return str;}
2023-08-18 14:12:187

c# 判断 sql 字段的类型

如果没抛异常的话那就是应该没有读到值
2023-08-18 14:12:435

c#里面如何定义一个string对象并且强制限制他不能为null?

不可能。
2023-08-18 14:13:125

EF 链表查询的时候 有null值的时候报错 和对象类型不匹配 这个怎样处理

这个是SQL的话,可以用函数来处理 例如像mysql的ifnull 为空时赋一个值例如-1
2023-08-18 14:13:451